0x00 Chapter 7: CRUD Database Operations
在
routes.swift
檔案内寫各種路由
操作資料庫的記錄
1.create
建立記錄,之前的文章已經寫過了
需要送出資料
url:
http://127.0.0.1:8080/api/acronyms
method:
POST
parameters:
{"short": "TGD", "long":"Tomorrow is a good day"}
app.post("api", "acronyms") { req -> EventLoopFuture<Acronym> in
let acronym = try req.content.decode(Acronym.self)
return acronym.save(on: req.db).map {
acronym
}
}
2.retrieve
擷取所有記錄
url:
http://127.0.0.1:8080/api/acronyms
method:
GET
parameters:
無
app.get("api", "acronyms") { req -> EventLoopFuture<[Acronym]> in
Acronym.query(on: req.db).all()
}
3.retrieve a single acronym
根據
ID
查詢記錄
url:
http://127.0.0.1:8080/api/acronyms/<ID>
method:
GET
parameters:
ID
app.get("api", "acronyms", ":acronymID") { req -> EventLoopFuture<Acronym> in
Acronym.find(req.parameters.get("acronymID"), on: req.db)
.unwrap(or: Abort(.notFound))
}
4.update
根據
ID
更新記錄
url:
http://127.0.0.1:8080/api/acronyms/<ID>
method:
UPDATE
parameters:
{"short": "TGD1", "long":"Tomorrow is a good day1"}
app.put("api", "acronyms", ":acronymID") { req -> EventLoopFuture<Acronym> in
let updatedAcronym = try req.content.decode(Acronym.self)
return Acronym.find(req.parameters.get("acronymID"), on: req.db)
.unwrap(or: Abort(.notFound)).flatMap { acronym in
acronym.short = updatedAcronym.short
acronym.long = updatedAcronym.long
return acronym.save(on: req.db).map {
acronym
}
}
}
5.delete
根據
ID
删除記錄
url:
http://127.0.0.1:8080/api/acronyms/<ID>
method:
DELETE
parameters:
ID
app.delete("api", "acronyms", ":acronymID") { req -> EventLoopFuture<HTTPStatus> in
Acronym.find(req.parameters.get("acronymID"), on: req.db)
.unwrap(or: Abort(.notFound))
.flatMap { acronym in
acronym.delete(on: req.db)
.transform(to: .noContent)
}
}
6.filter
根據參數查詢記錄
url:
http://127.0.0.1:8080/api/acronyms/search?term=OMG
method:
GET
parameters:
無
app.get("api", "acronyms", "search") { req -> EventLoopFuture<[Acronym]> in
guard let searchTerm = req.query[String.self, at: "term"] else {
throw Abort(.badRequest)
}
return Acronym.query(on: req.db)
.filter(\.$short == searchTerm)
.all()
}
filter group
url:
http://127.0.0.1:8080/api/acronyms/search?term=Oh+My+God
method:
GET
parameters:
無
app.get("api", "acronyms", "search") { req -> EventLoopFuture<[Acronym]> in
guard let searchTerm = req.query[String.self, at: "term"] else {
throw Abort(.badRequest)
}
return Acronym.query(on: req.db).group(.or) { or in
or.filter(\.$short == searchTerm)
or.filter(\.$long == searchTerm)
}.all()
}
7.first result
查詢第一條記錄
url:
http://127.0.0.1:8080/api/acronyms/first
method:
GET
parameters:
無
app.get("api", "acronyms", "first") { req -> EventLoopFuture<Acronym> in
Acronym.query(on: req.db).first().unwrap(or: Abort(.notFound))
}
8.sorting results
對所有查詢記錄進行排序
app.get("api", "acronyms", "sorted") { req -> EventLoopFuture<[Acronym]> in
Acronym.query(on: req.db).sort(\.$short, .ascending).all()
}