forked from jmug/stoatchat
182 lines
4.5 KiB
Rust
182 lines
4.5 KiB
Rust
use super::super::get_db;
|
|
use super::scripts::LATEST_REVISION;
|
|
|
|
use log::info;
|
|
use mongodb::bson::doc;
|
|
use mongodb::options::CreateCollectionOptions;
|
|
|
|
pub async fn create_database() {
|
|
info!("Creating database.");
|
|
let db = get_db();
|
|
|
|
db.create_collection("accounts", None)
|
|
.await
|
|
.expect("Failed to create accounts collection.");
|
|
|
|
db.create_collection("users", None)
|
|
.await
|
|
.expect("Failed to create users collection.");
|
|
|
|
db.create_collection("channels", None)
|
|
.await
|
|
.expect("Failed to create channels collection.");
|
|
|
|
db.create_collection("messages", None)
|
|
.await
|
|
.expect("Failed to create messages collection.");
|
|
|
|
db.create_collection("servers", None)
|
|
.await
|
|
.expect("Failed to create servers collection.");
|
|
|
|
db.create_collection("server_members", None)
|
|
.await
|
|
.expect("Failed to create server_members collection.");
|
|
|
|
db.create_collection("server_bans", None)
|
|
.await
|
|
.expect("Failed to create server_bans collection.");
|
|
|
|
db.create_collection("channel_invites", None)
|
|
.await
|
|
.expect("Failed to create channel_invites collection.");
|
|
|
|
db.create_collection("channel_unreads", None)
|
|
.await
|
|
.expect("Failed to create channel_unreads collection.");
|
|
|
|
db.create_collection("migrations", None)
|
|
.await
|
|
.expect("Failed to create migrations collection.");
|
|
|
|
db.create_collection("attachments", None)
|
|
.await
|
|
.expect("Failed to create attachments collection.");
|
|
|
|
db.create_collection("user_settings", None)
|
|
.await
|
|
.expect("Failed to create user_settings collection.");
|
|
|
|
db.create_collection("bots", None)
|
|
.await
|
|
.expect("Failed to create bots collection.");
|
|
|
|
db.create_collection(
|
|
"pubsub",
|
|
CreateCollectionOptions::builder()
|
|
.capped(true)
|
|
.size(1_000_000)
|
|
.build(),
|
|
)
|
|
.await
|
|
.expect("Failed to create pubsub collection.");
|
|
|
|
db.run_command(
|
|
doc! {
|
|
"createIndexes": "users",
|
|
"indexes": [
|
|
{
|
|
"key": {
|
|
"username": 1
|
|
},
|
|
"name": "username",
|
|
"unique": true,
|
|
"collation": {
|
|
"locale": "en",
|
|
"strength": 2
|
|
}
|
|
}
|
|
]
|
|
},
|
|
None,
|
|
)
|
|
.await
|
|
.expect("Failed to create username index.");
|
|
|
|
db.run_command(
|
|
doc! {
|
|
"createIndexes": "messages",
|
|
"indexes": [
|
|
{
|
|
"key": {
|
|
"content": "text"
|
|
},
|
|
"name": "content"
|
|
},
|
|
{
|
|
"key": {
|
|
"channel": 1
|
|
},
|
|
"name": "channel"
|
|
}
|
|
]
|
|
},
|
|
None,
|
|
)
|
|
.await
|
|
.expect("Failed to create message index.");
|
|
|
|
get_db()
|
|
.run_command(
|
|
doc! {
|
|
"createIndexes": "messages",
|
|
"indexes": [
|
|
{
|
|
"key": {
|
|
"_id.channel": 1,
|
|
"_id.user": 1,
|
|
},
|
|
"name": "compound_id"
|
|
},
|
|
{
|
|
"key": {
|
|
"_id.user": 1,
|
|
},
|
|
"name": "user_id"
|
|
}
|
|
]
|
|
},
|
|
None,
|
|
)
|
|
.await
|
|
.expect("Failed to create channel_unreads index.");
|
|
|
|
get_db()
|
|
.run_command(
|
|
doc! {
|
|
"createIndexes": "messages",
|
|
"indexes": [
|
|
{
|
|
"key": {
|
|
"_id.server": 1,
|
|
"_id.user": 1,
|
|
},
|
|
"name": "compound_id"
|
|
},
|
|
{
|
|
"key": {
|
|
"_id.user": 1,
|
|
},
|
|
"name": "user_id"
|
|
}
|
|
]
|
|
},
|
|
None,
|
|
)
|
|
.await
|
|
.expect("Failed to create server_members index.");
|
|
|
|
db.collection("migrations")
|
|
.insert_one(
|
|
doc! {
|
|
"_id": 0,
|
|
"revision": LATEST_REVISION
|
|
},
|
|
None,
|
|
)
|
|
.await
|
|
.expect("Failed to save migration info.");
|
|
|
|
info!("Created database.");
|
|
}
|