Awesome
CouchDB Client
<p align="center"> <a href="https://github.com/makoni/couchdb-vapor"> <img src="https://spaceinbox.me/images/appicons/5cff134d1bb4a2e90faea5cf4e0002a2.svg?31-a992eba6ad7e189f4b3e0988936056ca" height="200"> </a> </p>This is a simple lib to work with CouchDB in Swift.
- Latest version is based on async/await and requires Swift 5.8 or newer. Works with Vapor 4.50 and newer.
- Version 1.0.0 can be used with Vapor 4 without async/await. Swift 5.3 is required
- You can use the old version for Vapor 3 from vapor3 branch or using version < 1.0.0.
The only dependency for this lib is <a href="https://github.com/swift-server/async-http-client">async-http-client</a>
Documentation
You can find docs, examples and even tutorials here.
Installation
Swift Package Manager
Add to the dependencies
value of your Package.swift
.
dependencies: [
.package(url: "https://github.com/makoni/couchdb-vapor.git", from: "1.6.0"),
]
Initialization
// use default params
let myClient = CouchDBClient()
// provide your own params
let couchDBClient = CouchDBClient(
couchProtocol: .http,
couchHost: "127.0.0.1",
couchPort: 5984,
userName: "admin",
userPassword: "myPassword"
)
If you don’t want to have your password in the code you can pass COUCHDB_PASS
param in your command line. For example you can run your Server Side Swift project:
COUCHDB_PASS=myPassword /path/.build/x86_64-unknown-linux-gnu/release/Run
Just use initializer without userPassword param:
let couchDBClient = CouchDBClient(
couchProtocol: .http,
couchHost: "127.0.0.1",
couchPort: 5984,
userName: "admin"
)
Usage examples
Define your document model:
// Example struct
struct ExpectedDoc: CouchDBRepresentable {
var name: String
var _id: String?
var _rev: String?
}
Insert data
var testDoc = ExpectedDoc(name: "My name")
try await couchDBClient.insert(
dbName: "databaseName",
doc: &testDoc
)
print(testDoc) // testDoc has _id and _rev values now
Update data
// get data from a database by document ID
var doc: ExpectedDoc = try await couchDBClient.get(fromDB: "databaseName", uri: "documentId")
print(doc)
// Update value
doc.name = "Updated name"
try await couchDBClient.update(
dbName: testsDB,
doc: &doc
)
print(doc) // doc will have updated name and _rev values now
Delete data:
let response = try await couchDBClient.delete(fromDb: "databaseName", doc: doc)
// or by uri
let response = try await couchDBClient.delete(fromDb: "databaseName", uri: doc._id,rev: doc._rev)
Get all databases example:
let dbs = try await couchDBClient.getAllDBs()
print(dbs)
// prints: ["_global_changes", "_replicator", "_users", "yourDBname"]
Find documents in a database by selector:
let selector = ["selector": ["name": "Sam"]]
let docs: [ExpectedDoc] = try await couchDBClient.find(in: "databaseName", selector: selector)
print(docs)
Using with Vapor
Here's a simple tutorial for Vapor.