🎉 Initial commit
This commit is contained in:
36
src/main.rs
Normal file
36
src/main.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
mod models;
|
||||
mod schema;
|
||||
mod tracker;
|
||||
|
||||
use crate::models::Hit;
|
||||
use crate::schema::hits::dsl::*;
|
||||
use diesel::{Connection, PgConnection, QueryDsl, RunQueryDsl, SelectableHelper};
|
||||
use std::env;
|
||||
|
||||
#[macro_use]
|
||||
extern crate rocket;
|
||||
|
||||
#[get("/")]
|
||||
fn index() -> &'static str {
|
||||
"Hello world!"
|
||||
}
|
||||
|
||||
#[launch]
|
||||
fn rocket() -> _ {
|
||||
dotenv::dotenv().ok();
|
||||
|
||||
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
||||
let mut db = PgConnection::establish(&database_url)
|
||||
.expect(&format!("Error connecting to {}", database_url));
|
||||
|
||||
let results = hits
|
||||
.limit(5)
|
||||
.select(Hit::as_select())
|
||||
.load(&mut db)
|
||||
.expect("Error loading hits");
|
||||
println!("results: {}", results.len());
|
||||
|
||||
rocket::build()
|
||||
.mount("/", routes![index])
|
||||
.mount("/tracker", routes![tracker::index])
|
||||
}
|
||||
23
src/models.rs
Normal file
23
src/models.rs
Normal file
@@ -0,0 +1,23 @@
|
||||
use diesel::{Insertable, Queryable, Selectable};
|
||||
use diesel::data_types::PgTimestamp;
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Queryable, Selectable, Insertable, Clone)]
|
||||
#[diesel(table_name = crate::schema::trackers)]
|
||||
#[diesel(check_for_backend(diesel::pg::Pg))]
|
||||
pub struct Tracker {
|
||||
pub id: Uuid,
|
||||
pub created_at: PgTimestamp,
|
||||
}
|
||||
|
||||
#[derive(Queryable, Selectable, Insertable, Clone)]
|
||||
#[diesel(table_name = crate::schema::hits)]
|
||||
#[diesel(check_for_backend(diesel::pg::Pg))]
|
||||
pub struct Hit {
|
||||
pub id: Uuid,
|
||||
pub tracker_id: Uuid,
|
||||
pub ip: String,
|
||||
pub agent: Option<String>,
|
||||
pub language: Option<String>,
|
||||
pub created_at: PgTimestamp,
|
||||
}
|
||||
23
src/schema.rs
Normal file
23
src/schema.rs
Normal file
@@ -0,0 +1,23 @@
|
||||
// @generated automatically by Diesel CLI.
|
||||
|
||||
diesel::table! {
|
||||
hits (id) {
|
||||
id -> Uuid,
|
||||
tracker_id -> Uuid,
|
||||
ip -> Text,
|
||||
agent -> Nullable<Text>,
|
||||
language -> Nullable<Text>,
|
||||
created_at -> Timestamp,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
trackers (id) {
|
||||
id -> Uuid,
|
||||
created_at -> Timestamp,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::joinable!(hits -> trackers (tracker_id));
|
||||
|
||||
diesel::allow_tables_to_appear_in_same_query!(hits, trackers,);
|
||||
13
src/tracker.rs
Normal file
13
src/tracker.rs
Normal file
@@ -0,0 +1,13 @@
|
||||
use serde::Serialize;
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct Tracker {
|
||||
pub id: Uuid,
|
||||
pub created_at: String,
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
pub fn index() -> &'static str {
|
||||
"Tracker"
|
||||
}
|
||||
Reference in New Issue
Block a user