From cfc060b645043d1a86a978d021712e1715b8949c Mon Sep 17 00:00:00 2001 From: shockrah Date: Mon, 16 Nov 2020 22:57:46 -0800 Subject: [PATCH] Member::add now supported however its up to the user of db-lib to create the secret(ideally one that doesn't suck) Literally pasted from the old version which proved to be working to I'm calling this one half way done --- server-api/db/src/member.rs | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/server-api/db/src/member.rs b/server-api/db/src/member.rs index 617163e..21249c3 100644 --- a/server-api/db/src/member.rs +++ b/server-api/db/src/member.rs @@ -4,11 +4,14 @@ use mysql_async::error::Error as SqlError; use async_trait::async_trait; +use serde::Serialize; + use crate::{Response, no_conn, sql_err}; use crate::{UBigInt, BigInt, Integer, VarChar}; use crate::common::{FromDB}; +#[derive(Serialize)] pub struct Member { pub id: UBigInt, pub secret: VarChar, @@ -151,3 +154,55 @@ impl FromDB for Member { } } } + +impl Member { + pub async fn add(p: &Pool, name: &str, secret: &str, perms: u64) -> Result, SqlError> { + //! @param {pool} + //! @param {&str} + //! @param {&str} + //! @param {u64} + + //! @returns : on_succes => Ok(Response) + //! @returns : on_partial_succes => Ok(Response) + //! @returns : on_failure => Err(SomeBS) + use chrono::Utc; + + let conn = p.get_conn().await?; + + //name + //perms + //secret + let now: BigInt = Utc::now().timestamp(); + + + let conn = conn.drop_exec( + "INSERT INTO members(secret, name, joindate, status, permissions) + VALUES(:secret, :name, :joindate, :status, :permissions)", + mysql_async::params!{ + "secret" => secret.clone(), + "name" => name.clone(), + "joindate" => now, + "status" => STATUS_ONLINE, + "permissions" => perms + }).await?; + + let (_, opt_id): (Conn, Option) = conn.first_exec( + "SELECT id FROM members WHERE secret = :secret", + params!{ + "secret" => secret.clone() + }).await?; + + if let Some(id) = opt_id { + return Ok(Response::Row(Self { + id: id, + secret: secret.into(), + name: name.into(), + joindate: now, + status: STATUS_ONLINE, + permissions: perms + })) + } + + return Ok(Response::Empty); + } +}