├── .gitignore ├── Assets ├── 01.jpg ├── 02.jpg ├── 03.jpg ├── 04.jpg ├── 05.jpg ├── 06.jpg ├── 07.jpg ├── 08.jpg ├── 09.jpg ├── 10.jpg ├── favicon.ico └── logo.png ├── Changelog.md ├── Chapter 01 └── .gitkeep ├── Chapter 02 ├── SPM │ ├── .gitignore │ ├── Package.swift │ ├── README.md │ └── Sources │ │ └── main.swift └── VaporToolbox │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ └── .gitkeep │ ├── README.md │ ├── Sources │ └── myProject │ │ ├── Controllers │ │ └── .gitkeep │ │ ├── configure.swift │ │ ├── entrypoint.swift │ │ └── routes.swift │ ├── Tests │ └── myProjectTests │ │ └── myProjectTests.swift │ └── docker-compose.yml ├── Chapter 03 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── css │ │ ├── peacock.min.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ └── web.js │ ├── Sources │ └── myProject │ │ ├── Middlewares │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ ├── Blog │ │ │ ├── BlogPost.swift │ │ │ ├── BlogRouter.swift │ │ │ ├── Controllers │ │ │ │ └── BlogFrontendController.swift │ │ │ └── Templates │ │ │ │ ├── Contexts │ │ │ │ ├── BlogPostContext.swift │ │ │ │ └── BlogPostsContext.swift │ │ │ │ └── Html │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ └── BlogPostsTemplate.swift │ │ └── Web │ │ │ ├── Controllers │ │ │ └── WebFrontendController.swift │ │ │ ├── Templates │ │ │ ├── Contexts │ │ │ │ ├── WebHomeContext.swift │ │ │ │ ├── WebIndexContext.swift │ │ │ │ └── WebLinkContext.swift │ │ │ └── Html │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ └── WebLinkTemplate.swift │ │ │ └── WebRouter.swift │ │ ├── Template │ │ ├── Request+Template.swift │ │ ├── TemplateRenderer.swift │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ ├── entrypoint.swift │ │ └── routes.swift │ ├── Tests │ └── myProjectTests │ │ └── myProjectTests.swift │ └── docker-compose.yml ├── Chapter 04 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Framework │ │ │ ├── DatabaseModelInterface.swift │ │ │ └── ModuleInterface.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── BlogFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 05 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Framework │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ └── ModuleInterface.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── BlogFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ └── UserSessionAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ └── UserAccountModel.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 06 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Framework │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ └── InputField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ └── LabelContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ └── LabelTemplate.swift │ │ │ └── ModuleInterface.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── BlogFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ └── UserSessionAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ └── UserAccountModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 07 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Framework │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ └── InputField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ └── LabelContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ └── LabelTemplate.swift │ │ │ ├── ModuleInterface.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── BlogFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ └── UserSessionAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ └── UserAccountModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 08 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Framework │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ ├── FormImageInput.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ ├── ModuleInterface.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── BlogFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ └── UserSessionAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ └── UserAccountModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 09 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── assets │ │ └── blog │ │ │ └── post │ │ │ └── 071C8D44-4AD8-495D-850B-64DCFB467DC7_2020-04-02_08-41-38.jpg │ ├── css │ │ ├── admin.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ ├── admin.js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Extensions │ │ │ └── Svg+MenuIcon.swift │ │ ├── Framework │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ ├── FormImageInput.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ ├── ModuleInterface.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Admin │ │ │ │ ├── AdminModule.swift │ │ │ │ ├── AdminRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── AdminFrontendController.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── AdminDashboardContext.swift │ │ │ │ │ └── AdminIndexContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── AdminDashboardTemplate.swift │ │ │ │ │ └── AdminIndexTemplate.swift │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── BlogFrontendController.swift │ │ │ │ │ ├── BlogPostAdminController.swift │ │ │ │ │ └── BlogPostApiController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── BlogPostEditForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostAdminDeleteContext.swift │ │ │ │ │ ├── BlogPostAdminDetailContext.swift │ │ │ │ │ ├── BlogPostAdminEditContext.swift │ │ │ │ │ ├── BlogPostAdminListContext.swift │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostAdminDeleteTemplate.swift │ │ │ │ │ ├── BlogPostAdminDetailTemplate.swift │ │ │ │ │ ├── BlogPostAdminEditTemplate.swift │ │ │ │ │ ├── BlogPostAdminListTemplate.swift │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ └── UserSessionAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ └── UserAccountModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 10 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── assets │ │ └── blog │ │ │ └── post │ │ │ └── 071C8D44-4AD8-495D-850B-64DCFB467DC7_2020-04-02_08-41-38.jpg │ ├── css │ │ ├── admin.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ ├── admin.js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Extensions │ │ │ └── Svg+MenuIcon.swift │ │ ├── Framework │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── Controllers │ │ │ │ └── ModelController.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ └── FormImageInput.swift │ │ │ ├── ModelEditorInterface.swift │ │ │ ├── ModuleInterface.swift │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── CellContext.swift │ │ │ │ │ ├── ColumnContext.swift │ │ │ │ │ ├── DetailContext.swift │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── LinkContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── RowContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ ├── TableContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── CellTemplate.swift │ │ │ │ │ ├── DetailTemplate.swift │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── LinkTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ ├── TableTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Admin │ │ │ │ ├── AdminModule.swift │ │ │ │ ├── AdminRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── AdminCreateController.swift │ │ │ │ │ ├── AdminDeleteController.swift │ │ │ │ │ ├── AdminDetailController.swift │ │ │ │ │ ├── AdminFrontendController.swift │ │ │ │ │ ├── AdminListController.swift │ │ │ │ │ └── AdminUpdateController.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── AdminDashboardContext.swift │ │ │ │ │ ├── AdminDeletePageContext.swift │ │ │ │ │ ├── AdminDetailPageContext.swift │ │ │ │ │ ├── AdminEditorPageContext.swift │ │ │ │ │ ├── AdminIndexContext.swift │ │ │ │ │ └── AdminListPageContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── AdminDashboardTemplate.swift │ │ │ │ │ ├── AdminDeletePageTemplate.swift │ │ │ │ │ ├── AdminDetailPageTemplate.swift │ │ │ │ │ ├── AdminEditorPageTemplate.swift │ │ │ │ │ ├── AdminIndexTemplate.swift │ │ │ │ │ └── AdminListPageTemplate.swift │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── BlogCategoryAdminController.swift │ │ │ │ │ ├── BlogFrontendController.swift │ │ │ │ │ ├── BlogPostAdminController.swift │ │ │ │ │ └── BlogPostApiController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Editors │ │ │ │ │ ├── BlogCategoryEditor.swift │ │ │ │ │ └── BlogPostEditor.swift │ │ │ │ ├── Forms │ │ │ │ │ └── BlogPostEditForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostAdminDeleteContext.swift │ │ │ │ │ ├── BlogPostAdminDetailContext.swift │ │ │ │ │ ├── BlogPostAdminEditContext.swift │ │ │ │ │ ├── BlogPostAdminListContext.swift │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostAdminDeleteTemplate.swift │ │ │ │ │ ├── BlogPostAdminDetailTemplate.swift │ │ │ │ │ ├── BlogPostAdminEditTemplate.swift │ │ │ │ │ ├── BlogPostAdminListTemplate.swift │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ └── UserSessionAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ └── UserAccountModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 11 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── assets │ │ └── blog │ │ │ └── post │ │ │ └── 071C8D44-4AD8-495D-850B-64DCFB467DC7_2020-04-02_08-41-38.jpg │ ├── css │ │ ├── admin.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ ├── admin.js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Extensions │ │ │ └── Svg+MenuIcon.swift │ │ ├── Framework │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── Controllers │ │ │ │ └── ModelController.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ └── FormImageInput.swift │ │ │ ├── ModelEditorInterface.swift │ │ │ ├── ModuleInterface.swift │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── CellContext.swift │ │ │ │ │ ├── ColumnContext.swift │ │ │ │ │ ├── DetailContext.swift │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── LinkContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── RowContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ ├── TableContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── CellTemplate.swift │ │ │ │ │ ├── DetailTemplate.swift │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── LinkTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ ├── TableTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Admin │ │ │ │ ├── AdminModule.swift │ │ │ │ ├── AdminRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── AdminCreateController.swift │ │ │ │ │ ├── AdminDeleteController.swift │ │ │ │ │ ├── AdminDetailController.swift │ │ │ │ │ ├── AdminFrontendController.swift │ │ │ │ │ ├── AdminListController.swift │ │ │ │ │ └── AdminUpdateController.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── AdminDashboardContext.swift │ │ │ │ │ ├── AdminDeletePageContext.swift │ │ │ │ │ ├── AdminDetailPageContext.swift │ │ │ │ │ ├── AdminEditorPageContext.swift │ │ │ │ │ ├── AdminIndexContext.swift │ │ │ │ │ └── AdminListPageContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── AdminDashboardTemplate.swift │ │ │ │ │ ├── AdminDeletePageTemplate.swift │ │ │ │ │ ├── AdminDetailPageTemplate.swift │ │ │ │ │ ├── AdminEditorPageTemplate.swift │ │ │ │ │ ├── AdminIndexTemplate.swift │ │ │ │ │ └── AdminListPageTemplate.swift │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── BlogCategoryAdminController.swift │ │ │ │ │ ├── BlogCategoryApiController.swift │ │ │ │ │ ├── BlogFrontendController.swift │ │ │ │ │ ├── BlogPostAdminController.swift │ │ │ │ │ └── BlogPostApiController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Editors │ │ │ │ │ ├── BlogCategoryEditor.swift │ │ │ │ │ └── BlogPostEditor.swift │ │ │ │ ├── Forms │ │ │ │ │ └── BlogPostEditForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostAdminDeleteContext.swift │ │ │ │ │ ├── BlogPostAdminDetailContext.swift │ │ │ │ │ ├── BlogPostAdminEditContext.swift │ │ │ │ │ ├── BlogPostAdminListContext.swift │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostAdminDeleteTemplate.swift │ │ │ │ │ ├── BlogPostAdminDetailTemplate.swift │ │ │ │ │ ├── BlogPostAdminEditTemplate.swift │ │ │ │ │ ├── BlogPostAdminListTemplate.swift │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ └── UserSessionAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ └── UserAccountModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 12 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── assets │ │ └── blog │ │ │ └── post │ │ │ └── 071C8D44-4AD8-495D-850B-64DCFB467DC7_2020-04-02_08-41-38.jpg │ ├── css │ │ ├── admin.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ ├── admin.js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Extensions │ │ │ └── Svg+MenuIcon.swift │ │ ├── Framework │ │ │ ├── ApiModelInterface.swift │ │ │ ├── ApiModuleInterface.swift │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── Controllers │ │ │ │ ├── CreateController.swift │ │ │ │ ├── DeleteController.swift │ │ │ │ ├── DetailController.swift │ │ │ │ ├── ListController.swift │ │ │ │ ├── ModelController.swift │ │ │ │ ├── PatchController.swift │ │ │ │ └── UpdateController.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ └── FormImageInput.swift │ │ │ ├── ModelEditorInterface.swift │ │ │ ├── ModuleInterface.swift │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── CellContext.swift │ │ │ │ │ ├── ColumnContext.swift │ │ │ │ │ ├── DetailContext.swift │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── LinkContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── RowContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ ├── TableContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── CellTemplate.swift │ │ │ │ │ ├── DetailTemplate.swift │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── LinkTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ ├── TableTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Admin │ │ │ │ ├── AdminModule.swift │ │ │ │ ├── AdminRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── AdminController.swift │ │ │ │ │ ├── AdminCreateController.swift │ │ │ │ │ ├── AdminDeleteController.swift │ │ │ │ │ ├── AdminDetailController.swift │ │ │ │ │ ├── AdminFrontendController.swift │ │ │ │ │ ├── AdminListController.swift │ │ │ │ │ └── AdminUpdateController.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── AdminDashboardContext.swift │ │ │ │ │ ├── AdminDeletePageContext.swift │ │ │ │ │ ├── AdminDetailPageContext.swift │ │ │ │ │ ├── AdminEditorPageContext.swift │ │ │ │ │ ├── AdminIndexContext.swift │ │ │ │ │ └── AdminListPageContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── AdminDashboardTemplate.swift │ │ │ │ │ ├── AdminDeletePageTemplate.swift │ │ │ │ │ ├── AdminDetailPageTemplate.swift │ │ │ │ │ ├── AdminEditorPageTemplate.swift │ │ │ │ │ ├── AdminIndexTemplate.swift │ │ │ │ │ └── AdminListPageTemplate.swift │ │ │ ├── Api │ │ │ │ └── Controllers │ │ │ │ │ ├── ApiController.swift │ │ │ │ │ ├── ApiCreateController.swift │ │ │ │ │ ├── ApiDeleteController.swift │ │ │ │ │ ├── ApiDetailController.swift │ │ │ │ │ ├── ApiListController.swift │ │ │ │ │ ├── ApiPatchController.swift │ │ │ │ │ └── ApiUpdateController.swift │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── BlogCategoryAdminController.swift │ │ │ │ │ ├── BlogCategoryApiController.swift │ │ │ │ │ ├── BlogFrontendController.swift │ │ │ │ │ ├── BlogPostAdminController.swift │ │ │ │ │ └── BlogPostApiController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Editors │ │ │ │ │ ├── BlogCategoryEditor.swift │ │ │ │ │ └── BlogPostEditor.swift │ │ │ │ ├── Forms │ │ │ │ │ └── BlogPostEditForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostAdminDeleteContext.swift │ │ │ │ │ ├── BlogPostAdminDetailContext.swift │ │ │ │ │ ├── BlogPostAdminEditContext.swift │ │ │ │ │ ├── BlogPostAdminListContext.swift │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostAdminDeleteTemplate.swift │ │ │ │ │ ├── BlogPostAdminDetailTemplate.swift │ │ │ │ │ ├── BlogPostAdminEditTemplate.swift │ │ │ │ │ ├── BlogPostAdminListTemplate.swift │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ └── UserSessionAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ └── UserAccountModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 13 └── myProject │ ├── Dockerfile │ ├── Package.resolved │ ├── Package.swift │ ├── Public │ ├── assets │ │ └── blog │ │ │ └── post │ │ │ └── 071C8D44-4AD8-495D-850B-64DCFB467DC7_2020-04-02_08-41-38.jpg │ ├── css │ │ ├── admin.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ ├── admin.js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Extensions │ │ │ └── Svg+MenuIcon.swift │ │ ├── Framework │ │ │ ├── ApiModelInterface.swift │ │ │ ├── ApiModuleInterface.swift │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── Controllers │ │ │ │ ├── CreateController.swift │ │ │ │ ├── DeleteController.swift │ │ │ │ ├── DetailController.swift │ │ │ │ ├── ListController.swift │ │ │ │ ├── ModelController.swift │ │ │ │ ├── PatchController.swift │ │ │ │ └── UpdateController.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ └── FormImageInput.swift │ │ │ ├── ModelEditorInterface.swift │ │ │ ├── ModuleInterface.swift │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── CellContext.swift │ │ │ │ │ ├── ColumnContext.swift │ │ │ │ │ ├── DetailContext.swift │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── LinkContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── RowContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ ├── TableContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── CellTemplate.swift │ │ │ │ │ ├── DetailTemplate.swift │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── LinkTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ ├── TableTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── KeyedContentValidator+Validations.swift │ │ │ │ ├── KeyedContentValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ ├── ValidationError.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Admin │ │ │ │ ├── AdminModule.swift │ │ │ │ ├── AdminRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── AdminController.swift │ │ │ │ │ ├── AdminCreateController.swift │ │ │ │ │ ├── AdminDeleteController.swift │ │ │ │ │ ├── AdminDetailController.swift │ │ │ │ │ ├── AdminFrontendController.swift │ │ │ │ │ ├── AdminListController.swift │ │ │ │ │ └── AdminUpdateController.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── AdminDashboardContext.swift │ │ │ │ │ ├── AdminDeletePageContext.swift │ │ │ │ │ ├── AdminDetailPageContext.swift │ │ │ │ │ ├── AdminEditorPageContext.swift │ │ │ │ │ ├── AdminIndexContext.swift │ │ │ │ │ └── AdminListPageContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── AdminDashboardTemplate.swift │ │ │ │ │ ├── AdminDeletePageTemplate.swift │ │ │ │ │ ├── AdminDetailPageTemplate.swift │ │ │ │ │ ├── AdminEditorPageTemplate.swift │ │ │ │ │ ├── AdminIndexTemplate.swift │ │ │ │ │ └── AdminListPageTemplate.swift │ │ │ ├── Api │ │ │ │ ├── ApiModule.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── ApiController.swift │ │ │ │ │ ├── ApiCreateController.swift │ │ │ │ │ ├── ApiDeleteController.swift │ │ │ │ │ ├── ApiDetailController.swift │ │ │ │ │ ├── ApiListController.swift │ │ │ │ │ ├── ApiPatchController.swift │ │ │ │ │ └── ApiUpdateController.swift │ │ │ │ └── Middlewares │ │ │ │ │ └── ApiErrorMiddleware.swift │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── BlogCategoryAdminController.swift │ │ │ │ │ ├── BlogCategoryApiController.swift │ │ │ │ │ ├── BlogFrontendController.swift │ │ │ │ │ ├── BlogPostAdminController.swift │ │ │ │ │ └── BlogPostApiController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Editors │ │ │ │ │ ├── BlogCategoryEditor.swift │ │ │ │ │ └── BlogPostEditor.swift │ │ │ │ ├── Forms │ │ │ │ │ └── BlogPostEditForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostAdminDeleteContext.swift │ │ │ │ │ ├── BlogPostAdminDetailContext.swift │ │ │ │ │ ├── BlogPostAdminEditContext.swift │ │ │ │ │ ├── BlogPostAdminListContext.swift │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostAdminDeleteTemplate.swift │ │ │ │ │ ├── BlogPostAdminDetailTemplate.swift │ │ │ │ │ ├── BlogPostAdminEditTemplate.swift │ │ │ │ │ ├── BlogPostAdminListTemplate.swift │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ ├── UserSessionAuthenticator.swift │ │ │ │ │ └── UserTokenAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── UserApiController.swift │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── UserAccountModel.swift │ │ │ │ │ │ └── UserTokenModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── User.swift │ │ │ │ │ ├── UserAccount.swift │ │ │ │ │ └── UserToken.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ └── AppTests.swift │ └── docker-compose.yml ├── Chapter 14 └── myProject │ ├── Dockerfile │ ├── Package.resolved │ ├── Package.swift │ ├── Public │ ├── assets │ │ └── blog │ │ │ └── post │ │ │ └── 071C8D44-4AD8-495D-850B-64DCFB467DC7_2020-04-02_08-41-38.jpg │ ├── css │ │ ├── admin.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ ├── admin.js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Extensions │ │ │ └── Svg+MenuIcon.swift │ │ ├── Framework │ │ │ ├── ApiModelInterface.swift │ │ │ ├── ApiModuleInterface.swift │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── Controllers │ │ │ │ ├── CreateController.swift │ │ │ │ ├── DeleteController.swift │ │ │ │ ├── DetailController.swift │ │ │ │ ├── ListController.swift │ │ │ │ ├── ModelController.swift │ │ │ │ ├── PatchController.swift │ │ │ │ └── UpdateController.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ └── FormImageInput.swift │ │ │ ├── ModelEditorInterface.swift │ │ │ ├── ModuleInterface.swift │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── CellContext.swift │ │ │ │ │ ├── ColumnContext.swift │ │ │ │ │ ├── DetailContext.swift │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── LinkContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── RowContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ ├── TableContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── CellTemplate.swift │ │ │ │ │ ├── DetailTemplate.swift │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── LinkTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ ├── TableTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── KeyedContentValidator+Validations.swift │ │ │ │ ├── KeyedContentValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ ├── ValidationError.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Admin │ │ │ │ ├── AdminModule.swift │ │ │ │ ├── AdminRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── AdminController.swift │ │ │ │ │ ├── AdminCreateController.swift │ │ │ │ │ ├── AdminDeleteController.swift │ │ │ │ │ ├── AdminDetailController.swift │ │ │ │ │ ├── AdminFrontendController.swift │ │ │ │ │ ├── AdminListController.swift │ │ │ │ │ └── AdminUpdateController.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── AdminDashboardContext.swift │ │ │ │ │ ├── AdminDeletePageContext.swift │ │ │ │ │ ├── AdminDetailPageContext.swift │ │ │ │ │ ├── AdminEditorPageContext.swift │ │ │ │ │ ├── AdminIndexContext.swift │ │ │ │ │ └── AdminListPageContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── AdminDashboardTemplate.swift │ │ │ │ │ ├── AdminDeletePageTemplate.swift │ │ │ │ │ ├── AdminDetailPageTemplate.swift │ │ │ │ │ ├── AdminEditorPageTemplate.swift │ │ │ │ │ ├── AdminIndexTemplate.swift │ │ │ │ │ └── AdminListPageTemplate.swift │ │ │ ├── Api │ │ │ │ ├── ApiModule.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── ApiController.swift │ │ │ │ │ ├── ApiCreateController.swift │ │ │ │ │ ├── ApiDeleteController.swift │ │ │ │ │ ├── ApiDetailController.swift │ │ │ │ │ ├── ApiListController.swift │ │ │ │ │ ├── ApiPatchController.swift │ │ │ │ │ └── ApiUpdateController.swift │ │ │ │ └── Middlewares │ │ │ │ │ └── ApiErrorMiddleware.swift │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── BlogCategoryAdminController.swift │ │ │ │ │ ├── BlogCategoryApiController.swift │ │ │ │ │ ├── BlogFrontendController.swift │ │ │ │ │ ├── BlogPostAdminController.swift │ │ │ │ │ └── BlogPostApiController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Editors │ │ │ │ │ ├── BlogCategoryEditor.swift │ │ │ │ │ └── BlogPostEditor.swift │ │ │ │ ├── Forms │ │ │ │ │ └── BlogPostEditForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostAdminDeleteContext.swift │ │ │ │ │ ├── BlogPostAdminDetailContext.swift │ │ │ │ │ ├── BlogPostAdminEditContext.swift │ │ │ │ │ ├── BlogPostAdminListContext.swift │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogPostAdminDeleteTemplate.swift │ │ │ │ │ ├── BlogPostAdminDetailTemplate.swift │ │ │ │ │ ├── BlogPostAdminEditTemplate.swift │ │ │ │ │ ├── BlogPostAdminListTemplate.swift │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ ├── UserSessionAuthenticator.swift │ │ │ │ │ └── UserTokenAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── UserApiController.swift │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── UserAccountModel.swift │ │ │ │ │ │ └── UserTokenModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── User.swift │ │ │ │ │ ├── UserAccount.swift │ │ │ │ │ └── UserToken.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ ├── AppTests.swift │ │ ├── BlogCategoryApiTests.swift │ │ ├── BlogPostApiTests.swift │ │ └── Framework │ │ ├── AppTestCase.swift │ │ └── XCTApplicationTester.swift │ └── docker-compose.yml ├── Chapter 15 └── myProject │ ├── Dockerfile │ ├── Package.resolved │ ├── Package.swift │ ├── Public │ ├── assets │ │ └── blog │ │ │ └── post │ │ │ └── 071C8D44-4AD8-495D-850B-64DCFB467DC7_2020-04-02_08-41-38.jpg │ ├── css │ │ ├── admin.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ ├── admin.js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Extensions │ │ │ └── Svg+MenuIcon.swift │ │ ├── Framework │ │ │ ├── ApiModelInterface.swift │ │ │ ├── ApiModuleInterface.swift │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── Controllers │ │ │ │ ├── CreateController.swift │ │ │ │ ├── DeleteController.swift │ │ │ │ ├── DetailController.swift │ │ │ │ ├── ListController.swift │ │ │ │ ├── ModelController.swift │ │ │ │ ├── PatchController.swift │ │ │ │ └── UpdateController.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ └── FormImageInput.swift │ │ │ ├── Hooks │ │ │ │ ├── Application+HookStorage.swift │ │ │ │ ├── Async │ │ │ │ │ ├── Application+AsyncHooks.swift │ │ │ │ │ ├── AsyncAnyHookFunction.swift │ │ │ │ │ ├── AsyncHookFunction.swift │ │ │ │ │ ├── HookStorage+AsyncHooks.swift │ │ │ │ │ └── Request+AsyncHooks.swift │ │ │ │ ├── HookArguments.swift │ │ │ │ ├── HookFunctionPointer.swift │ │ │ │ ├── HookStorage.swift │ │ │ │ └── Sync │ │ │ │ │ ├── AnyHookFunction.swift │ │ │ │ │ ├── Application+Hooks.swift │ │ │ │ │ ├── HookFunction.swift │ │ │ │ │ ├── HookStorage+Hooks.swift │ │ │ │ │ └── Request+Hooks.swift │ │ │ ├── ModelEditorInterface.swift │ │ │ ├── ModuleInterface.swift │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── CellContext.swift │ │ │ │ │ ├── ColumnContext.swift │ │ │ │ │ ├── DetailContext.swift │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── LinkContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── RowContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ ├── TableContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── CellTemplate.swift │ │ │ │ │ ├── DetailTemplate.swift │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── LinkTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ ├── TableTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── KeyedContentValidator+Validations.swift │ │ │ │ ├── KeyedContentValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ ├── ValidationError.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Admin │ │ │ │ ├── AdminModule.swift │ │ │ │ ├── AdminRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── AdminController.swift │ │ │ │ │ ├── AdminCreateController.swift │ │ │ │ │ ├── AdminDeleteController.swift │ │ │ │ │ ├── AdminDetailController.swift │ │ │ │ │ ├── AdminFrontendController.swift │ │ │ │ │ ├── AdminListController.swift │ │ │ │ │ └── AdminUpdateController.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── AdminDashboardContext.swift │ │ │ │ │ ├── AdminDeletePageContext.swift │ │ │ │ │ ├── AdminDetailPageContext.swift │ │ │ │ │ ├── AdminEditorPageContext.swift │ │ │ │ │ ├── AdminIndexContext.swift │ │ │ │ │ └── AdminListPageContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── AdminDashboardTemplate.swift │ │ │ │ │ ├── AdminDeletePageTemplate.swift │ │ │ │ │ ├── AdminDetailPageTemplate.swift │ │ │ │ │ ├── AdminEditorPageTemplate.swift │ │ │ │ │ ├── AdminIndexTemplate.swift │ │ │ │ │ └── AdminListPageTemplate.swift │ │ │ ├── Api │ │ │ │ ├── ApiModule.swift │ │ │ │ ├── ApiRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── ApiController.swift │ │ │ │ │ ├── ApiCreateController.swift │ │ │ │ │ ├── ApiDeleteController.swift │ │ │ │ │ ├── ApiDetailController.swift │ │ │ │ │ ├── ApiListController.swift │ │ │ │ │ ├── ApiPatchController.swift │ │ │ │ │ └── ApiUpdateController.swift │ │ │ │ └── Middlewares │ │ │ │ │ └── ApiErrorMiddleware.swift │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── BlogCategoryAdminController.swift │ │ │ │ │ ├── BlogCategoryApiController.swift │ │ │ │ │ ├── BlogFrontendController.swift │ │ │ │ │ ├── BlogPostAdminController.swift │ │ │ │ │ └── BlogPostApiController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Editors │ │ │ │ │ ├── BlogCategoryEditor.swift │ │ │ │ │ └── BlogPostEditor.swift │ │ │ │ ├── Forms │ │ │ │ │ └── BlogPostEditForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── Blog.swift │ │ │ │ │ ├── BlogCategory.swift │ │ │ │ │ └── BlogPost.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostAdminDeleteContext.swift │ │ │ │ │ ├── BlogPostAdminDetailContext.swift │ │ │ │ │ ├── BlogPostAdminEditContext.swift │ │ │ │ │ ├── BlogPostAdminListContext.swift │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogAdminWidgetTemplate.swift │ │ │ │ │ ├── BlogPostAdminDeleteTemplate.swift │ │ │ │ │ ├── BlogPostAdminDetailTemplate.swift │ │ │ │ │ ├── BlogPostAdminEditTemplate.swift │ │ │ │ │ ├── BlogPostAdminListTemplate.swift │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ ├── UserSessionAuthenticator.swift │ │ │ │ │ └── UserTokenAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── UserApiController.swift │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── UserAccountModel.swift │ │ │ │ │ │ └── UserTokenModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Objects │ │ │ │ │ ├── User.swift │ │ │ │ │ ├── UserAccount.swift │ │ │ │ │ └── UserToken.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ └── Run │ │ └── main.swift │ ├── Tests │ └── AppTests │ │ ├── AppTests.swift │ │ ├── BlogCategoryApiTests.swift │ │ ├── BlogPostApiTests.swift │ │ └── Framework │ │ ├── AppTestCase.swift │ │ └── XCTApplicationTester.swift │ └── docker-compose.yml ├── Chapter 16 └── myProject │ ├── Dockerfile │ ├── Package.swift │ ├── Public │ ├── assets │ │ └── blog │ │ │ └── post │ │ │ └── 071C8D44-4AD8-495D-850B-64DCFB467DC7_2020-04-02_08-41-38.jpg │ ├── css │ │ ├── admin.css │ │ └── web.css │ ├── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── posts │ │ │ ├── 01.jpg │ │ │ ├── 02.jpg │ │ │ ├── 03.jpg │ │ │ ├── 04.jpg │ │ │ ├── 05.jpg │ │ │ ├── 06.jpg │ │ │ ├── 07.jpg │ │ │ ├── 08.jpg │ │ │ ├── 09.jpg │ │ │ └── 10.jpg │ └── js │ │ ├── admin.js │ │ └── web.js │ ├── Sources │ ├── App │ │ ├── Extensions │ │ │ └── Svg+MenuIcon.swift │ │ ├── Framework │ │ │ ├── ApiModelInterface+PathComponent.swift │ │ │ ├── AuthenticatedUser.swift │ │ │ ├── Controllers │ │ │ │ ├── CreateController.swift │ │ │ │ ├── DeleteController.swift │ │ │ │ ├── DetailController.swift │ │ │ │ ├── ListController.swift │ │ │ │ ├── ModelController.swift │ │ │ │ ├── PatchController.swift │ │ │ │ └── UpdateController.swift │ │ │ ├── DatabaseModelInterface.swift │ │ │ ├── Extensions │ │ │ │ ├── ByteBuffer+Data.swift │ │ │ │ └── File+ByteBuffer.swift │ │ │ ├── Form │ │ │ │ ├── AbstractForm.swift │ │ │ │ ├── AbstractFormField.swift │ │ │ │ ├── Fields │ │ │ │ │ ├── HiddenField.swift │ │ │ │ │ ├── ImageField.swift │ │ │ │ │ ├── InputField.swift │ │ │ │ │ ├── SelectField.swift │ │ │ │ │ └── TextareaField.swift │ │ │ │ ├── FormAction.swift │ │ │ │ ├── FormComponent.swift │ │ │ │ ├── FormComponentBuilder.swift │ │ │ │ ├── FormImageData.swift │ │ │ │ └── FormImageInput.swift │ │ │ ├── Hooks │ │ │ │ ├── Application+HookStorage.swift │ │ │ │ ├── Async │ │ │ │ │ ├── Application+AsyncHooks.swift │ │ │ │ │ ├── AsyncAnyHookFunction.swift │ │ │ │ │ ├── AsyncHookFunction.swift │ │ │ │ │ ├── HookStorage+AsyncHooks.swift │ │ │ │ │ └── Request+AsyncHooks.swift │ │ │ │ ├── HookArguments.swift │ │ │ │ ├── HookFunctionPointer.swift │ │ │ │ ├── HookStorage.swift │ │ │ │ └── Sync │ │ │ │ │ ├── AnyHookFunction.swift │ │ │ │ │ ├── Application+Hooks.swift │ │ │ │ │ ├── HookFunction.swift │ │ │ │ │ ├── HookStorage+Hooks.swift │ │ │ │ │ └── Request+Hooks.swift │ │ │ ├── ModelEditorInterface.swift │ │ │ ├── ModuleInterface.swift │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── CellContext.swift │ │ │ │ │ ├── ColumnContext.swift │ │ │ │ │ ├── DetailContext.swift │ │ │ │ │ ├── FormContext.swift │ │ │ │ │ ├── HiddenFieldContext.swift │ │ │ │ │ ├── ImageFieldContext.swift │ │ │ │ │ ├── InputFieldContext.swift │ │ │ │ │ ├── LabelContext.swift │ │ │ │ │ ├── LinkContext.swift │ │ │ │ │ ├── OptionContext.swift │ │ │ │ │ ├── RowContext.swift │ │ │ │ │ ├── SelectFieldContext.swift │ │ │ │ │ ├── TableContext.swift │ │ │ │ │ └── TextareaFieldContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── CellTemplate.swift │ │ │ │ │ ├── DetailTemplate.swift │ │ │ │ │ ├── FormTemplate.swift │ │ │ │ │ ├── HiddenFieldTemplate.swift │ │ │ │ │ ├── ImageFieldTemplate.swift │ │ │ │ │ ├── InputFieldTemplate.swift │ │ │ │ │ ├── LabelTemplate.swift │ │ │ │ │ ├── LinkTemplate.swift │ │ │ │ │ ├── SelectFieldTemplate.swift │ │ │ │ │ ├── TableTemplate.swift │ │ │ │ │ └── TextareaFieldTemplate.swift │ │ │ └── Validation │ │ │ │ ├── AsyncValidator.swift │ │ │ │ ├── AsyncValidatorBuilder.swift │ │ │ │ ├── FormFieldValidator+Validations.swift │ │ │ │ ├── FormFieldValidator.swift │ │ │ │ ├── KeyedContentValidator+Validations.swift │ │ │ │ ├── KeyedContentValidator.swift │ │ │ │ ├── RequestValidator.swift │ │ │ │ ├── ValidationAbort.swift │ │ │ │ ├── ValidationError.swift │ │ │ │ └── ValidationErrorDetail.swift │ │ ├── Middlewares │ │ │ └── ExtendPathMiddleware.swift │ │ ├── Modules │ │ │ ├── Admin │ │ │ │ ├── AdminModule.swift │ │ │ │ ├── AdminRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── AdminController.swift │ │ │ │ │ ├── AdminCreateController.swift │ │ │ │ │ ├── AdminDeleteController.swift │ │ │ │ │ ├── AdminDetailController.swift │ │ │ │ │ ├── AdminFrontendController.swift │ │ │ │ │ ├── AdminListController.swift │ │ │ │ │ └── AdminUpdateController.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── AdminDashboardContext.swift │ │ │ │ │ ├── AdminDeletePageContext.swift │ │ │ │ │ ├── AdminDetailPageContext.swift │ │ │ │ │ ├── AdminEditorPageContext.swift │ │ │ │ │ ├── AdminIndexContext.swift │ │ │ │ │ └── AdminListPageContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── AdminDashboardTemplate.swift │ │ │ │ │ ├── AdminDeletePageTemplate.swift │ │ │ │ │ ├── AdminDetailPageTemplate.swift │ │ │ │ │ ├── AdminEditorPageTemplate.swift │ │ │ │ │ ├── AdminIndexTemplate.swift │ │ │ │ │ └── AdminListPageTemplate.swift │ │ │ ├── Api │ │ │ │ ├── ApiModule.swift │ │ │ │ ├── ApiRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── ApiController.swift │ │ │ │ │ ├── ApiCreateController.swift │ │ │ │ │ ├── ApiDeleteController.swift │ │ │ │ │ ├── ApiDetailController.swift │ │ │ │ │ ├── ApiListController.swift │ │ │ │ │ ├── ApiPatchController.swift │ │ │ │ │ └── ApiUpdateController.swift │ │ │ │ └── Middlewares │ │ │ │ │ └── ApiErrorMiddleware.swift │ │ │ ├── Blog │ │ │ │ ├── BlogModule.swift │ │ │ │ ├── BlogRouter.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── BlogCategoryAdminController.swift │ │ │ │ │ ├── BlogCategoryApiController.swift │ │ │ │ │ ├── BlogFrontendController.swift │ │ │ │ │ ├── BlogPostAdminController.swift │ │ │ │ │ └── BlogPostApiController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── BlogMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── BlogCategoryModel.swift │ │ │ │ │ │ └── BlogPostModel.swift │ │ │ │ ├── Editors │ │ │ │ │ ├── BlogCategoryEditor.swift │ │ │ │ │ └── BlogPostEditor.swift │ │ │ │ ├── Forms │ │ │ │ │ └── BlogPostEditForm.swift │ │ │ │ └── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ ├── BlogPostAdminDeleteContext.swift │ │ │ │ │ ├── BlogPostAdminDetailContext.swift │ │ │ │ │ ├── BlogPostAdminEditContext.swift │ │ │ │ │ ├── BlogPostAdminListContext.swift │ │ │ │ │ ├── BlogPostContext.swift │ │ │ │ │ └── BlogPostsContext.swift │ │ │ │ │ └── Html │ │ │ │ │ ├── BlogAdminWidgetTemplate.swift │ │ │ │ │ ├── BlogPostAdminDeleteTemplate.swift │ │ │ │ │ ├── BlogPostAdminDetailTemplate.swift │ │ │ │ │ ├── BlogPostAdminEditTemplate.swift │ │ │ │ │ ├── BlogPostAdminListTemplate.swift │ │ │ │ │ ├── BlogPostTemplate.swift │ │ │ │ │ └── BlogPostsTemplate.swift │ │ │ ├── User │ │ │ │ ├── Authenticators │ │ │ │ │ ├── UserCredentialsAuthenticator.swift │ │ │ │ │ ├── UserSessionAuthenticator.swift │ │ │ │ │ └── UserTokenAuthenticator.swift │ │ │ │ ├── Controllers │ │ │ │ │ ├── UserApiController.swift │ │ │ │ │ └── UserFrontendController.swift │ │ │ │ ├── Database │ │ │ │ │ ├── Migrations │ │ │ │ │ │ └── UserMigrations.swift │ │ │ │ │ └── Models │ │ │ │ │ │ ├── UserAccountModel.swift │ │ │ │ │ │ └── UserTokenModel.swift │ │ │ │ ├── Forms │ │ │ │ │ └── UserLoginForm.swift │ │ │ │ ├── Templates │ │ │ │ │ ├── Contexts │ │ │ │ │ │ └── UserLoginContext.swift │ │ │ │ │ └── Html │ │ │ │ │ │ └── UserLoginTemplate.swift │ │ │ │ ├── UserModule.swift │ │ │ │ └── UserRouter.swift │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── WebFrontendController.swift │ │ │ │ ├── Templates │ │ │ │ ├── Contexts │ │ │ │ │ ├── WebHomeContext.swift │ │ │ │ │ ├── WebIndexContext.swift │ │ │ │ │ └── WebLinkContext.swift │ │ │ │ └── Html │ │ │ │ │ ├── WebHomeTemplate.swift │ │ │ │ │ ├── WebIndexTemplate.swift │ │ │ │ │ └── WebLinkTemplate.swift │ │ │ │ ├── WebModule.swift │ │ │ │ └── WebRouter.swift │ │ ├── Template │ │ │ ├── Request+Template.swift │ │ │ ├── TemplateRenderer.swift │ │ │ └── TemplateRepresentable.swift │ │ ├── configure.swift │ │ └── routes.swift │ ├── AppApi │ │ ├── Framework │ │ │ ├── ApiModelInterface.swift │ │ │ └── ApiModuleInterface.swift │ │ └── Modules │ │ │ ├── Blog │ │ │ ├── Blog.swift │ │ │ ├── BlogCategory.swift │ │ │ └── BlogPost.swift │ │ │ └── User │ │ │ ├── User.swift │ │ │ ├── UserAccount.swift │ │ │ └── UserToken.swift │ └── Run │ │ └── main.swift │ ├── Tests │ ├── AppApiTests │ │ └── AppApiTests.swift │ └── AppTests │ │ ├── AppTests.swift │ │ ├── BlogCategoryApiTests.swift │ │ ├── BlogPostApiTests.swift │ │ └── Framework │ │ ├── AppTestCase.swift │ │ └── XCTApplicationTester.swift │ └── docker-compose.yml └── README.md /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/.gitignore -------------------------------------------------------------------------------- /Assets/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/01.jpg -------------------------------------------------------------------------------- /Assets/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/02.jpg -------------------------------------------------------------------------------- /Assets/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/03.jpg -------------------------------------------------------------------------------- /Assets/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/04.jpg -------------------------------------------------------------------------------- /Assets/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/05.jpg -------------------------------------------------------------------------------- /Assets/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/06.jpg -------------------------------------------------------------------------------- /Assets/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/07.jpg -------------------------------------------------------------------------------- /Assets/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/08.jpg -------------------------------------------------------------------------------- /Assets/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/09.jpg -------------------------------------------------------------------------------- /Assets/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/10.jpg -------------------------------------------------------------------------------- /Assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/favicon.ico -------------------------------------------------------------------------------- /Assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Assets/logo.png -------------------------------------------------------------------------------- /Changelog.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Changelog.md -------------------------------------------------------------------------------- /Chapter 01/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Chapter 02/SPM/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | xcuserdata/ 6 | -------------------------------------------------------------------------------- /Chapter 02/SPM/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/SPM/Package.swift -------------------------------------------------------------------------------- /Chapter 02/SPM/README.md: -------------------------------------------------------------------------------- 1 | # myProject 2 | 3 | A description of this package. 4 | -------------------------------------------------------------------------------- /Chapter 02/SPM/Sources/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/SPM/Sources/main.swift -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/.dockerignore: -------------------------------------------------------------------------------- 1 | .build/ 2 | .swiftpm/ 3 | -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/.gitignore -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/Dockerfile -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/Package.swift -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/Public/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/README.md -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/Sources/myProject/Controllers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/Sources/myProject/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/Sources/myProject/configure.swift -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/Sources/myProject/entrypoint.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/Sources/myProject/entrypoint.swift -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/Sources/myProject/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/Sources/myProject/routes.swift -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/Tests/myProjectTests/myProjectTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/Tests/myProjectTests/myProjectTests.swift -------------------------------------------------------------------------------- /Chapter 02/VaporToolbox/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 02/VaporToolbox/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 03/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 03/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/css/peacock.min.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/css/peacock.min.css -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 03/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 03/myProject/Sources/myProject/Modules/Blog/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Sources/myProject/Modules/Blog/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Sources/myProject/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Sources/myProject/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Sources/myProject/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Sources/myProject/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Sources/myProject/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Sources/myProject/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Sources/myProject/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Sources/myProject/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Sources/myProject/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Sources/myProject/configure.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Sources/myProject/entrypoint.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Sources/myProject/entrypoint.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Sources/myProject/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Sources/myProject/routes.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/Tests/myProjectTests/myProjectTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/Tests/myProjectTests/myProjectTests.swift -------------------------------------------------------------------------------- /Chapter 03/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 03/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 04/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 04/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 04/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 04/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 04/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 05/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 05/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 05/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 05/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 05/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 06/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 06/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 06/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 06/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 06/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 07/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 07/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 07/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 07/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 07/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 08/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 08/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 08/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/Fields/ImageField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/Fields/ImageField.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/Fields/SelectField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/Fields/SelectField.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 08/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 08/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 09/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 09/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/css/admin.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/css/admin.css -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/js/admin.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Chapter 09/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Extensions/Svg+MenuIcon.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Extensions/Svg+MenuIcon.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/Fields/ImageField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/Fields/ImageField.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/Fields/SelectField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/Fields/SelectField.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Admin/AdminModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Admin/AdminModule.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Admin/AdminRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Admin/AdminRouter.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 09/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 09/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 10/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 10/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/css/admin.css: -------------------------------------------------------------------------------- 1 | tr { 2 | column-gap: 1rem; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/js/admin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/js/admin.js -------------------------------------------------------------------------------- /Chapter 10/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Extensions/Svg+MenuIcon.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Extensions/Svg+MenuIcon.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/Fields/ImageField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/Fields/ImageField.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/Fields/SelectField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/Fields/SelectField.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/ModelEditorInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/ModelEditorInterface.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Admin/AdminModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Admin/AdminModule.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Admin/AdminRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Admin/AdminRouter.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 10/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 10/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 11/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 11/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/css/admin.css: -------------------------------------------------------------------------------- 1 | tr { 2 | column-gap: 1rem; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/js/admin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/js/admin.js -------------------------------------------------------------------------------- /Chapter 11/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Extensions/Svg+MenuIcon.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Extensions/Svg+MenuIcon.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/Fields/ImageField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/Fields/ImageField.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/Fields/SelectField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/Fields/SelectField.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/ModelEditorInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/ModelEditorInterface.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Admin/AdminModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Admin/AdminModule.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Admin/AdminRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Admin/AdminRouter.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 11/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 11/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 12/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 12/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/css/admin.css: -------------------------------------------------------------------------------- 1 | tr { 2 | column-gap: 1rem; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/js/admin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/js/admin.js -------------------------------------------------------------------------------- /Chapter 12/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Extensions/Svg+MenuIcon.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Extensions/Svg+MenuIcon.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/ApiModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/ApiModelInterface.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/ApiModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/ApiModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/Fields/ImageField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/Fields/ImageField.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/Fields/SelectField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/Fields/SelectField.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/ModelEditorInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/ModelEditorInterface.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Admin/AdminModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Admin/AdminModule.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Admin/AdminRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Admin/AdminRouter.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 12/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 12/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 13/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 13/myProject/Package.resolved: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Package.resolved -------------------------------------------------------------------------------- /Chapter 13/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/css/admin.css: -------------------------------------------------------------------------------- 1 | tr { 2 | column-gap: 1rem; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/js/admin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/js/admin.js -------------------------------------------------------------------------------- /Chapter 13/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Extensions/Svg+MenuIcon.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Extensions/Svg+MenuIcon.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/ApiModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/ApiModelInterface.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/ApiModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/ApiModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/Fields/ImageField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/Fields/ImageField.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/Fields/SelectField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/Fields/SelectField.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/ModelEditorInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/ModelEditorInterface.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Admin/AdminModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Admin/AdminModule.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Admin/AdminRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Admin/AdminRouter.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Api/ApiModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Api/ApiModule.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/User/Objects/User.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/User/Objects/User.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/User/Objects/UserAccount.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/User/Objects/UserAccount.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/User/Objects/UserToken.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/User/Objects/UserToken.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 13/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 13/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 14/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 14/myProject/Package.resolved: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Package.resolved -------------------------------------------------------------------------------- /Chapter 14/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/css/admin.css: -------------------------------------------------------------------------------- 1 | tr { 2 | column-gap: 1rem; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/js/admin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/js/admin.js -------------------------------------------------------------------------------- /Chapter 14/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Extensions/Svg+MenuIcon.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Extensions/Svg+MenuIcon.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/ApiModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/ApiModelInterface.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/ApiModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/ApiModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/DatabaseModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/DatabaseModelInterface.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/AbstractFormField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/AbstractFormField.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/Fields/HiddenField.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/Fields/ImageField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/Fields/ImageField.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/Fields/InputField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/Fields/InputField.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/Fields/SelectField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/Fields/SelectField.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/ModelEditorInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/ModelEditorInterface.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Middlewares/ExtendPathMiddleware.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Admin/AdminModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Admin/AdminModule.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Admin/AdminRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Admin/AdminRouter.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Api/ApiModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Api/ApiModule.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/User/Forms/UserLoginForm.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/User/Objects/User.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/User/Objects/User.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/User/Objects/UserToken.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/User/Objects/UserToken.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Tests/AppTests/BlogCategoryApiTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Tests/AppTests/BlogCategoryApiTests.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Tests/AppTests/BlogPostApiTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Tests/AppTests/BlogPostApiTests.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/Tests/AppTests/Framework/AppTestCase.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/Tests/AppTests/Framework/AppTestCase.swift -------------------------------------------------------------------------------- /Chapter 14/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 14/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 15/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 15/myProject/Package.resolved: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Package.resolved -------------------------------------------------------------------------------- /Chapter 15/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/css/admin.css: -------------------------------------------------------------------------------- 1 | tr { 2 | column-gap: 1rem; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/js/admin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/js/admin.js -------------------------------------------------------------------------------- /Chapter 15/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Extensions/Svg+MenuIcon.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Extensions/Svg+MenuIcon.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/ApiModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/ApiModelInterface.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/ApiModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/ApiModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/Hooks/HookArguments.swift: -------------------------------------------------------------------------------- 1 | typealias HookArguments = [String: Any] 2 | -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/Hooks/HookStorage.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/Hooks/HookStorage.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/ModelEditorInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/ModelEditorInterface.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Admin/AdminModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Admin/AdminModule.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Admin/AdminRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Admin/AdminRouter.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Api/ApiModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Api/ApiModule.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Api/ApiRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Api/ApiRouter.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Blog/Objects/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Blog/Objects/Blog.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Blog/Objects/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/User/Objects/User.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/User/Objects/User.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/User/Objects/UserToken.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/User/Objects/UserToken.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Tests/AppTests/BlogCategoryApiTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Tests/AppTests/BlogCategoryApiTests.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Tests/AppTests/BlogPostApiTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Tests/AppTests/BlogPostApiTests.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/Tests/AppTests/Framework/AppTestCase.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/Tests/AppTests/Framework/AppTestCase.swift -------------------------------------------------------------------------------- /Chapter 15/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 15/myProject/docker-compose.yml -------------------------------------------------------------------------------- /Chapter 16/myProject/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Dockerfile -------------------------------------------------------------------------------- /Chapter 16/myProject/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Package.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/css/admin.css: -------------------------------------------------------------------------------- 1 | tr { 2 | column-gap: 1rem; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/css/web.css: -------------------------------------------------------------------------------- 1 | #blog h2 { 2 | margin: 0.5rem 0; 3 | } 4 | -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/favicon.ico -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/logo.png -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/01.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/02.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/03.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/04.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/05.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/06.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/07.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/08.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/09.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/img/posts/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/img/posts/10.jpg -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/js/admin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/js/admin.js -------------------------------------------------------------------------------- /Chapter 16/myProject/Public/js/web.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Public/js/web.js -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Extensions/Svg+MenuIcon.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Extensions/Svg+MenuIcon.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/AuthenticatedUser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/AuthenticatedUser.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/Form/AbstractForm.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/Form/AbstractForm.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/Form/FormAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/Form/FormAction.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/Form/FormComponent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/Form/FormComponent.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/Form/FormImageData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/Form/FormImageData.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/Form/FormImageInput.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/Form/FormImageInput.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/Hooks/HookArguments.swift: -------------------------------------------------------------------------------- 1 | typealias HookArguments = [String: Any] 2 | -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/Hooks/HookStorage.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/Hooks/HookStorage.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/ModelEditorInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/ModelEditorInterface.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Framework/ModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Framework/ModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/Admin/AdminModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/Admin/AdminModule.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/Admin/AdminRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/Admin/AdminRouter.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/Api/ApiModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/Api/ApiModule.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/Api/ApiRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/Api/ApiRouter.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/Blog/BlogModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/Blog/BlogModule.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/Blog/BlogRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/Blog/BlogRouter.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/User/UserModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/User/UserModule.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/User/UserRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/User/UserRouter.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/Web/WebModule.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/Web/WebModule.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Modules/Web/WebRouter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Modules/Web/WebRouter.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Template/Request+Template.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Template/Request+Template.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Template/TemplateRenderer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Template/TemplateRenderer.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/Template/TemplateRepresentable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/Template/TemplateRepresentable.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/configure.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/configure.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/App/routes.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/App/routes.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/AppApi/Framework/ApiModelInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/AppApi/Framework/ApiModelInterface.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/AppApi/Framework/ApiModuleInterface.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/AppApi/Framework/ApiModuleInterface.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/AppApi/Modules/Blog/Blog.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/AppApi/Modules/Blog/Blog.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/AppApi/Modules/Blog/BlogCategory.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/AppApi/Modules/Blog/BlogCategory.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/AppApi/Modules/Blog/BlogPost.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/AppApi/Modules/Blog/BlogPost.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/AppApi/Modules/User/User.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/AppApi/Modules/User/User.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/AppApi/Modules/User/UserAccount.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/AppApi/Modules/User/UserAccount.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/AppApi/Modules/User/UserToken.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/AppApi/Modules/User/UserToken.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Sources/Run/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Sources/Run/main.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Tests/AppApiTests/AppApiTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Tests/AppApiTests/AppApiTests.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Tests/AppTests/AppTests.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Tests/AppTests/BlogCategoryApiTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Tests/AppTests/BlogCategoryApiTests.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Tests/AppTests/BlogPostApiTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Tests/AppTests/BlogPostApiTests.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/Tests/AppTests/Framework/AppTestCase.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/Tests/AppTests/Framework/AppTestCase.swift -------------------------------------------------------------------------------- /Chapter 16/myProject/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/Chapter 16/myProject/docker-compose.yml -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tib/practical-server-side-swift/HEAD/README.md --------------------------------------------------------------------------------