This is simple lib to work with CouchDB in Swift.
The only depndency for this lib is async-http-client
You can find docs, examples and even tutorials here.
Add to the dependencies
value of your Package.swift
.
dependencies: [
.package(url: "https://github.com/makoni/couchdb-vapor.git", from: "1.2.0"),
]
// 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 you 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"
)
Define your document model:
// Example struct
struct ExpectedDoc: CouchDBRepresentable, Codable {
var name: String
var _id: String?
var _rev: String?
}
var testDoc = ExpectedDoc(name: "My name")
try await couchDBClient.insert(
dbName: "databaseName",
doc: &testDoc
)
print(testDoc) // testDoc has _id and _rev values now
// get data from DB by document ID
var doc: ExpectedDoc = try await couchDBClient.get(dbName: "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 example:
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 DBs example:
let dbs = try await couchDBClient.getAllDBs()
print(dbs)
// prints: ["_global_changes", "_replicator", "_users", "yourDBname"]
Here's a simple tutorial for Vapor.
link |
Stars: 10 |
Last commit: 1 week ago |
Updated async-http-client to 1.19.0
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics