Skip to content
Snippets Groups Projects
Commit a4c1fee4 authored by insert's avatar insert
Browse files

Sync: Allow custom timestamp; return correct data structure.

parent 62ffa109
Branches
Tags
No related merge requests found
Rocket.toml
/target
/target_backup
**/*.rs.bk
.mongo
.env
......
......@@ -104,7 +104,7 @@ pub enum ClientboundNotification {
},
UserSettingsUpdate {
id: String,
update: HashMap<String, String>
update: JsonValue
}
}
......
......@@ -3,23 +3,40 @@ use crate::notifications::events::ClientboundNotification;
use crate::util::result::{Error, Result};
use chrono::prelude::*;
use rocket::request::Form;
use std::collections::HashMap;
use rocket_contrib::json::Json;
use mongodb::bson::{doc, to_bson};
use serde::{Serialize, Deserialize};
use mongodb::options::UpdateOptions;
type Data = HashMap<String, String>;
#[post("/settings/set", data = "<data>")]
pub async fn req(user: User, data: Json<Data>) -> Result<()> {
#[derive(Serialize, Deserialize, FromForm)]
pub struct Options {
timestamp: Option<i64>,
}
#[post("/settings/set?<options..>", data = "<data>")]
pub async fn req(user: User, data: Json<Data>, options: Form<Options>) -> Result<()> {
let data = data.into_inner();
let current_time = Utc::now().timestamp_millis();
let timestamp = if let Some(timestamp) = options.timestamp {
if timestamp > current_time {
current_time
} else {
timestamp
}
} else {
current_time
};
let mut set = doc! {};
for (key, data) in &data {
set.insert(
key.clone(),
vec! [
to_bson(&Utc::now().timestamp_millis()).unwrap(),
to_bson(&timestamp).unwrap(),
to_bson(&data.clone()).unwrap()
]
);
......@@ -32,7 +49,7 @@ pub async fn req(user: User, data: Json<Data>) -> Result<()> {
"_id": &user.id
},
doc! {
"$set": set
"$set": &set
},
UpdateOptions::builder()
.upsert(true)
......@@ -44,7 +61,7 @@ pub async fn req(user: User, data: Json<Data>) -> Result<()> {
ClientboundNotification::UserSettingsUpdate {
id: user.id.clone(),
update: data
update: json!(set)
}
.publish(user.id);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment