50 lines
1.1 KiB
TypeScript
50 lines
1.1 KiB
TypeScript
import { MongoClient } from 'mongodb'
|
|
import { MONGO_URL } from './config.js'
|
|
|
|
interface OAuthCollection {
|
|
accessToken: string
|
|
refreshToken: string
|
|
}
|
|
interface MemberIds {
|
|
memberIds: string[]
|
|
}
|
|
|
|
export const initMongodb = async () => {
|
|
const client = new MongoClient(MONGO_URL)
|
|
await client.connect()
|
|
|
|
const db = client.db('bot')
|
|
|
|
return {
|
|
saveOAuth: ({ accessToken, refreshToken }: OAuthCollection) => {
|
|
const collection = db.collection<OAuthCollection>('oauth')
|
|
|
|
return collection.findOneAndReplace(
|
|
{},
|
|
{ accessToken, refreshToken },
|
|
{ upsert: true }
|
|
)
|
|
},
|
|
|
|
getOAuth: () => {
|
|
const collection = db.collection<OAuthCollection>('oauth')
|
|
|
|
return collection.findOne()
|
|
},
|
|
|
|
setWeeklyTeamOrder: (memberIds: string[]) => {
|
|
const collection = db.collection<MemberIds>('weeklyTeamOrder')
|
|
|
|
return collection.findOneAndReplace({}, { memberIds }, { upsert: true })
|
|
},
|
|
|
|
getWeeklyTeamOrder: () => {
|
|
const collection = db.collection<MemberIds>('weeklyTeamOrder')
|
|
|
|
return collection.findOne()
|
|
},
|
|
|
|
close: () => client.close(),
|
|
}
|
|
}
|