@wepublish/api-db-mongodb
Version:
We.publish Database adapter for mongoDB
55 lines (47 loc) • 1.42 kB
text/typescript
import {
DBSettingAdapter,
OptionalSetting,
Setting,
SettingName,
UpdateSettingArgs
} from '@wepublish/api'
import {Collection, Db} from 'mongodb'
import {CollectionName, DBSetting} from './schema'
export class MongoDBSettingAdapter implements DBSettingAdapter {
private settings: Collection<DBSetting<unknown>>
constructor(db: Db) {
this.settings = db.collection(CollectionName.Settings)
}
async getSetting(name: SettingName): Promise<OptionalSetting> {
const setting = await this.settings.findOne({name: name})
if (!setting) return null
return {
id: setting._id,
name: setting.name,
value: setting.value,
settingRestriction: setting.settingRestriction
}
}
async getSettingList(): Promise<Setting[]> {
const settings = await this.settings.find().toArray()
return settings.map(({_id: id, ...data}) => ({id, ...data}))
}
async updateSettingList(newSettings: UpdateSettingArgs[]): Promise<OptionalSetting[]> {
return Promise.all(
newSettings.map(async ({name, value: val}) => {
const {value} = await this.settings.findOneAndUpdate(
{name: name},
{
$set: {
value: val
}
},
{returnOriginal: false}
)
if (!value) return null
const {_id: outID, ...setting} = value
return {id: outID, ...setting}
})
)
}
}