Add API method to easiliy tick a track now

This commit is contained in:
D. Scott Boggs 2023-06-17 13:20:08 -04:00
parent e2efd6fe66
commit c85af82eb7
4 changed files with 72 additions and 10 deletions

39
server/Cargo.lock generated
View file

@ -297,8 +297,11 @@ checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
dependencies = [ dependencies = [
"android-tzdata", "android-tzdata",
"iana-time-zone", "iana-time-zone",
"js-sys",
"num-traits", "num-traits",
"serde", "serde",
"time 0.1.45",
"wasm-bindgen",
"winapi", "winapi",
] ]
@ -345,7 +348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
dependencies = [ dependencies = [
"percent-encoding", "percent-encoding",
"time", "time 0.3.22",
"version_check", "version_check",
] ]
@ -750,7 +753,7 @@ checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"wasi", "wasi 0.11.0+wasi-snapshot-preview1",
] ]
[[package]] [[package]]
@ -1046,6 +1049,7 @@ dependencies = [
name = "kalkulog-server" name = "kalkulog-server"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"chrono",
"derive_builder", "derive_builder",
"either", "either",
"femme", "femme",
@ -1154,7 +1158,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
dependencies = [ dependencies = [
"libc", "libc",
"wasi", "wasi 0.11.0+wasi-snapshot-preview1",
"windows-sys", "windows-sys",
] ]
@ -1660,7 +1664,7 @@ dependencies = [
"serde_json", "serde_json",
"state", "state",
"tempfile", "tempfile",
"time", "time 0.3.22",
"tokio", "tokio",
"tokio-stream", "tokio-stream",
"tokio-util", "tokio-util",
@ -1705,7 +1709,7 @@ dependencies = [
"smallvec", "smallvec",
"stable-pattern", "stable-pattern",
"state", "state",
"time", "time 0.3.22",
"tokio", "tokio",
"uncased", "uncased",
] ]
@ -1819,7 +1823,7 @@ dependencies = [
"serde_json", "serde_json",
"sqlx", "sqlx",
"thiserror", "thiserror",
"time", "time 0.3.22",
"tracing", "tracing",
"url", "url",
"uuid", "uuid",
@ -1882,7 +1886,7 @@ dependencies = [
"rust_decimal", "rust_decimal",
"sea-query-derive", "sea-query-derive",
"serde_json", "serde_json",
"time", "time 0.3.22",
"uuid", "uuid",
] ]
@ -1898,7 +1902,7 @@ dependencies = [
"sea-query", "sea-query",
"serde_json", "serde_json",
"sqlx", "sqlx",
"time", "time 0.3.22",
"uuid", "uuid",
] ]
@ -2169,7 +2173,7 @@ dependencies = [
"sqlx-rt", "sqlx-rt",
"stringprep", "stringprep",
"thiserror", "thiserror",
"time", "time 0.3.22",
"tokio-stream", "tokio-stream",
"url", "url",
"uuid", "uuid",
@ -2393,6 +2397,17 @@ dependencies = [
"once_cell", "once_cell",
] ]
[[package]]
name = "time"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
dependencies = [
"libc",
"wasi 0.10.0+wasi-snapshot-preview1",
"winapi",
]
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.22" version = "0.3.22"
@ -2767,6 +2782,12 @@ dependencies = [
"try-lock", "try-lock",
] ]
[[package]]
name = "wasi"
version = "0.10.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.11.0+wasi-snapshot-preview1" version = "0.11.0+wasi-snapshot-preview1"

View file

@ -13,6 +13,7 @@ path = "src/main.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
chrono = "0.4.26"
femme = "2.2.1" femme = "2.2.1"
sea-orm-migration = "0.11.3" sea-orm-migration = "0.11.3"
serde_json = "1.0.96" serde_json = "1.0.96"

View file

@ -4,7 +4,7 @@ use crate::error::Error;
use either::Either::{self, Left, Right}; use either::Either::{self, Left, Right};
use rocket::http::Status; use rocket::http::Status;
use rocket::{serde::json::Json, State}; use rocket::{serde::json::Json, State};
use sea_orm::{prelude::*, DatabaseConnection, EntityOrSelect}; use sea_orm::{prelude::*, DatabaseConnection};
use std::default::default; use std::default::default;
#[get("/")] #[get("/")]
@ -86,3 +86,17 @@ pub(super) async fn delete_track(db: &State<DatabaseConnection>, id: i32) -> Api
.map_err(Error::from)?; .map_err(Error::from)?;
Ok(Status::Ok) Ok(Status::Ok)
} }
#[patch("/<id>/ticked")]
pub(super) async fn ticked(
db: &State<DatabaseConnection>,
id: i32,
) -> ApiResult<Json<ticks::Model>> {
let tick = ticks::ActiveModel::now(id);
Ok(Json(
tick.insert(db as &DatabaseConnection)
.await
.map_err(Error::from)?
.to_owned(),
))
}

View file

@ -1,5 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3
use std::default::default;
use chrono::{Datelike, Timelike, Utc};
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -37,3 +40,26 @@ impl Related<super::tracks::Entity> for Entity {
} }
impl ActiveModelBehavior for ActiveModel {} impl ActiveModelBehavior for ActiveModel {}
impl ActiveModel {
pub(crate) fn now(track_id: i32) -> Self {
use sea_orm::ActiveValue::Set;
let now = Utc::now();
Self {
track_id: Set(Some(track_id)),
year: Set(Some(now.year())),
month: Set(now.month().try_into().ok()),
/* ^^^^^^^^^^^^^^^^^^^^^^^
* I can't imagine a situation where this doesn't fit. This way, at
* least, if it fails, you just get a messed up database entry that
* doesn't do anything bad
*/
day: Set(now.day().try_into().ok()),
hour: Set(now.hour().try_into().ok()),
minute: Set(now.minute().try_into().ok()),
second: Set(now.second().try_into().ok()),
has_time_info: Set(Some(1)),
..default()
}
}
}