Skip to content

Instantly share code, notes, and snippets.

@hsharghi
hsharghi / configure.swift
Last active December 21, 2019 12:38
virgool-blog-0020
import FluentSQLite
import Vapor
/// Called before your application initializes.
public func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws {
// Register providers first
try services.register(FluentSQLiteProvider())
// Register routes to the router
@hsharghi
hsharghi / routes.swift
Last active December 21, 2019 12:35
virgool-blog-0008
import Vapor
public func routes(_ router: Router) throws {
let postController = PostController() // 1
// 2
/// GET /posts
router.get("posts", use: postController.index)
@hsharghi
hsharghi / PostController.swift
Last active December 21, 2019 11:12
virgool-post-controller-0015
import Vapor
/// Controls basic CRUD operations on `Post`s.
final class PostController {
/// Returns a list of all `Posts`s.
/// GET /posts
func index(_ req: Request) throws -> Future<[Post]> {
return Post.query(on: req).all() //1
@hsharghi
hsharghi / flatMap.swift
Created December 13, 2019 01:01
virgool-blog-0002
struct PostAndComments {
var post: Post
var comments: [Comment]
}
func showPostsWithComments() -> Future<[PostAndComments]> {
return getPostsFromDatabase().flatMap { posts -> Future<[PostAndComments]> in
return posts.flatMap { post -> Future<[PostAndComments]> in
return post.getComments().map { comments -> [PostAndComments] in
return PostAndComment(post: post, comments: comments)
@hsharghi
hsharghi / map.swift
Created December 13, 2019 01:00
virgool-blog-0001
let futurePosts = getPostsFromDatabase().map { posts in
// posts: [Post]
for post in posts {
print(post.title)
}
}
@hsharghi
hsharghi / Post.swift
Last active December 20, 2019 19:37
virgool-blog-0005
import Vapor
import FluentMySQL // 1
final class Post: MySQLModel { // 2
var id: Int?
var title: String
var body: String // 3
init(id: Int? = nil, title: String, body: String) { // 4
self.id = id
@hsharghi
hsharghi / ValidateIranianNationalCode.swift
Last active October 22, 2018 20:48
Validate Iranian national code in Swift 4 - کنترل صحت کد ملی ایران
func validate(input: String) -> Bool {
let digits = input.map { Int(String($0)) }
guard digits.count == 10 && digits.count == input.count else {
return false
}
let check = digits[9]!
let remainder = digits.prefix(upTo: 9).enumerated().reduce(0) {
@hsharghi
hsharghi / UserController.swift
Created May 31, 2018 14:10
UserController-00.swift
import Vapor
import Crypto // 1
/// Controls basic CRUD operations on `User`s.
final class UserController: RouteCollection {
func boot(router: Router) throws {
let users = router.grouped("users") // 2
users.get(use: index)
@hsharghi
hsharghi / routes-0.swift
Created May 31, 2018 13:54
Routes for Blog API in Vapor 3
import Vapor
public func routes(_ router: Router) throws {
let userController = UserController()
router.post("users", use: UserController.create)
router.get("users", use: UserController.index)
router.get("users", User.parameter, use: UserController.show)
router.patch("users", use: UserController.update)
router.delete("users", User.parameter, use: UserController.delete)
@hsharghi
hsharghi / routes.swift
Last active May 31, 2018 13:37
Routes for Blog API using Vapor 3
import Vapor
public func routes(_ router: Router) throws {
try router.register(collection: UserController())
}