Move api routes to /api and add /api/sessions
This commit is contained in:
4
Cargo.lock
generated
4
Cargo.lock
generated
@ -1,5 +1,7 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "addr2line"
|
name = "addr2line"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
@ -1879,7 +1881,7 @@ checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stl"
|
name = "stl"
|
||||||
version = "2.3.0"
|
version = "2.4.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode",
|
"bincode",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "stl"
|
name = "stl"
|
||||||
description = "studielogg aka scuffed toggl"
|
description = "studielogg aka scuffed toggl"
|
||||||
version = "2.3.0"
|
version = "2.4.0"
|
||||||
authors = ["Joakim Hulthe <joakim@hulthe.net>"]
|
authors = ["Joakim Hulthe <joakim@hulthe.net>"]
|
||||||
license = "MPL-2.0"
|
license = "MPL-2.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|||||||
0
src/database/category.rs
Normal file
0
src/database/category.rs
Normal file
@ -1,4 +1,5 @@
|
|||||||
pub mod unversioned;
|
pub mod unversioned;
|
||||||
|
pub mod util;
|
||||||
pub mod v1;
|
pub mod v1;
|
||||||
pub mod v2;
|
pub mod v2;
|
||||||
|
|
||||||
|
|||||||
10
src/database/util/categories.rs
Normal file
10
src/database/util/categories.rs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
|
use crate::database::v2;
|
||||||
|
|
||||||
|
pub fn get_category() -> () {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_all_categories() -> Result<HashMap< {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
25
src/database/util/category.rs
Normal file
25
src/database/util/category.rs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
use crate::database::latest::trees::categories;
|
||||||
|
use crate::status_json::StatusJson;
|
||||||
|
use bincode::{deserialize, serialize};
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
pub fn get_category(
|
||||||
|
tree: &sled::Tree,
|
||||||
|
key: &categories::K,
|
||||||
|
) -> Result<Option<categories::V>, StatusJson> {
|
||||||
|
Ok(match tree.get(serialize(key)?)? {
|
||||||
|
Some(raw) => Some(deserialize(&raw)?),
|
||||||
|
None => None,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_all_categories(
|
||||||
|
tree: &sled::Tree,
|
||||||
|
) -> Result<HashMap<categories::K, categories::V>, StatusJson> {
|
||||||
|
Ok(tree
|
||||||
|
.iter()
|
||||||
|
.map(|result| {
|
||||||
|
result.map(|(k, v)| deserialize(&k).and_then(|k| deserialize(&v).map(|v| (k, v))))
|
||||||
|
})
|
||||||
|
.collect::<Result<Result<_, _>, _>>()??)
|
||||||
|
}
|
||||||
1
src/database/util/mod.rs
Normal file
1
src/database/util/mod.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod category;
|
||||||
@ -61,7 +61,13 @@ async fn main() -> io::Result<()> {
|
|||||||
routes::pages::session_edit,
|
routes::pages::session_edit,
|
||||||
routes::pages::stats::single_stats,
|
routes::pages::stats::single_stats,
|
||||||
routes::pages::stats::all_stats,
|
routes::pages::stats::all_stats,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
.mount(
|
||||||
|
"/api",
|
||||||
|
rocket::routes![
|
||||||
routes::api::edit_session,
|
routes::api::edit_session,
|
||||||
|
routes::api::get_sessions,
|
||||||
routes::api::create_category,
|
routes::api::create_category,
|
||||||
routes::api::start_session,
|
routes::api::start_session,
|
||||||
routes::api::end_session,
|
routes::api::end_session,
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
use crate::auth::Authorized;
|
use crate::auth::Authorized;
|
||||||
use crate::database::latest::trees::{categories, sessions};
|
use crate::database::latest::trees::{categories, sessions};
|
||||||
|
use crate::database::util::category::get_all_categories;
|
||||||
use crate::routes::pages;
|
use crate::routes::pages;
|
||||||
use crate::status_json::StatusJson;
|
use crate::status_json::StatusJson;
|
||||||
use bincode::{deserialize, serialize};
|
use bincode::{deserialize, serialize};
|
||||||
@ -7,9 +8,20 @@ use chrono::{Duration, Local, NaiveDateTime, TimeZone};
|
|||||||
use rocket::http::Status;
|
use rocket::http::Status;
|
||||||
use rocket::request::{Form, FromForm};
|
use rocket::request::{Form, FromForm};
|
||||||
use rocket::response::Redirect;
|
use rocket::response::Redirect;
|
||||||
use rocket::{post, uri, State};
|
use rocket::{get, post, uri, State};
|
||||||
|
use rocket_contrib::json::Json;
|
||||||
use rocket_contrib::uuid::Uuid;
|
use rocket_contrib::uuid::Uuid;
|
||||||
use sled::Transactional;
|
use sled::Transactional;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
#[get("/sessions")]
|
||||||
|
pub fn get_sessions(
|
||||||
|
_auth: Authorized,
|
||||||
|
db: State<'_, sled::Db>,
|
||||||
|
) -> Result<Json<HashMap<categories::K, categories::V>>, StatusJson> {
|
||||||
|
let categories_tree = db.open_tree(categories::NAME)?;
|
||||||
|
Ok(Json(get_all_categories(&categories_tree)?))
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(FromForm)]
|
#[derive(FromForm)]
|
||||||
pub struct NewCategory {
|
pub struct NewCategory {
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
<a href="/history">tillbaka</a>
|
<a href="/history">tillbaka</a>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
<form action="/session/{{session_id}}/edit" method="post">
|
<form action="/api/session/{{session_id}}/edit" method="post">
|
||||||
<input type="hidden" id="category" name="category" value="{{session.category}}">
|
<input type="hidden" id="category" name="category" value="{{session.category}}">
|
||||||
<input type="hidden" id="deleted" name="deleted" value="{{session.deleted}}">
|
<input type="hidden" id="deleted" name="deleted" value="{{session.deleted}}">
|
||||||
<span>Started:</span>
|
<span>Started:</span>
|
||||||
@ -20,7 +20,7 @@
|
|||||||
<button type="submit">spara</button>
|
<button type="submit">spara</button>
|
||||||
</form>
|
</form>
|
||||||
<br>
|
<br>
|
||||||
<form action="/session/{{this.session_id}}/delete" method="post">
|
<form action="/api/session/{{this.session_id}}/delete" method="post">
|
||||||
<button type="submit">ta bort</button>
|
<button type="submit">ta bort</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -12,10 +12,10 @@
|
|||||||
// Get the corresponding route to activate/inactivate the category
|
// Get the corresponding route to activate/inactivate the category
|
||||||
let url;
|
let url;
|
||||||
if(active) {
|
if(active) {
|
||||||
url = "/category/" + id + "/end_session";
|
url = "/api/category/" + id + "/end_session";
|
||||||
cl.remove(toggled_class);
|
cl.remove(toggled_class);
|
||||||
} else {
|
} else {
|
||||||
url = "/category/" + id + "/start_session";
|
url = "/api/category/" + id + "/start_session";
|
||||||
cl.add(toggled_class);
|
cl.add(toggled_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +40,7 @@
|
|||||||
></div>
|
></div>
|
||||||
<span class="category_name">{{this.1.name}}</span>
|
<span class="category_name">{{this.1.name}}</span>
|
||||||
{{#if this.1.started}}
|
{{#if this.1.started}}
|
||||||
<form action="/category/{{this.0}}/bump_session/minutes/5", method="post">
|
<form action="/api/category/{{this.0}}/bump_session/minutes/5", method="post">
|
||||||
<button style="height: 100%; color: green;" type="submit">+5</button>
|
<button style="height: 100%; color: green;" type="submit">+5</button>
|
||||||
</form>
|
</form>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1 class="title">stl</h1>
|
<h1 class="title">stl</h1>
|
||||||
<h2>Logga in</h2>
|
<h2>Logga in</h2>
|
||||||
<form action="/login" method="post">
|
<form action="/api/login" method="post">
|
||||||
<input type="password" id="password" name="password"></input>
|
<input type="password" id="password" name="password"></input>
|
||||||
</form>
|
</form>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Reference in New Issue
Block a user