feat(db): improved layout for accounts table and defined the projects table
This commit is contained in:
parent
31a8c80eca
commit
9d4cd2e146
|
@ -14,6 +14,9 @@ pub struct Account {
|
||||||
pub password: String,
|
pub password: String,
|
||||||
pub joined: sqlx_chrono::NaiveDateTime,
|
pub joined: sqlx_chrono::NaiveDateTime,
|
||||||
pub verified: bool,
|
pub verified: bool,
|
||||||
|
pub follows: Option<Vec<i64>>,
|
||||||
|
pub followers: Option<Vec<i64>>,
|
||||||
|
pub permissions: i64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Account {
|
impl Account {
|
||||||
|
@ -33,7 +36,7 @@ impl Account {
|
||||||
let joined = sqlx_chrono::Utc::now().naive_utc();
|
let joined = sqlx_chrono::Utc::now().naive_utc();
|
||||||
|
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
r#"INSERT INTO Accounts (username, email, salt, password, joined, verified) VALUES ($1, $2, $3, $4, $5, false);"#,
|
r#"INSERT INTO Accounts (username, email, salt, password, joined, verified, permissions) VALUES ($1, $2, $3, $4, $5, false, 0);"#,
|
||||||
username,
|
username,
|
||||||
email,
|
email,
|
||||||
salt.to_string(),
|
salt.to_string(),
|
||||||
|
@ -54,7 +57,18 @@ impl Account {
|
||||||
pub async fn from_username(pool: &PgPool, username: &String) -> Result<Option<Self>> {
|
pub async fn from_username(pool: &PgPool, username: &String) -> Result<Option<Self>> {
|
||||||
match sqlx::query_as!(
|
match sqlx::query_as!(
|
||||||
Self,
|
Self,
|
||||||
r#"SELECT id, username, email, salt, password, joined, verified as "verified!: bool" FROM Accounts WHERE username = $1;"#,
|
r#"SELECT
|
||||||
|
id,
|
||||||
|
username,
|
||||||
|
email,
|
||||||
|
salt,
|
||||||
|
password,
|
||||||
|
joined,
|
||||||
|
verified as "verified!: bool",
|
||||||
|
follows,
|
||||||
|
followers,
|
||||||
|
permissions
|
||||||
|
FROM Accounts WHERE username = $1;"#,
|
||||||
username
|
username
|
||||||
)
|
)
|
||||||
.fetch_one(pool)
|
.fetch_one(pool)
|
||||||
|
@ -69,7 +83,18 @@ impl Account {
|
||||||
pub async fn from_id(pool: &PgPool, id: i64) -> Result<Option<Self>> {
|
pub async fn from_id(pool: &PgPool, id: i64) -> Result<Option<Self>> {
|
||||||
match sqlx::query_as!(
|
match sqlx::query_as!(
|
||||||
Self,
|
Self,
|
||||||
r#"SELECT id, username, email, salt, password, joined, verified as "verified!: bool" FROM Accounts WHERE id = $1;"#,
|
r#"SELECT
|
||||||
|
id,
|
||||||
|
username,
|
||||||
|
email,
|
||||||
|
salt,
|
||||||
|
password,
|
||||||
|
joined,
|
||||||
|
verified as "verified!: bool",
|
||||||
|
follows,
|
||||||
|
followers,
|
||||||
|
permissions
|
||||||
|
FROM Accounts WHERE id = $1;"#,
|
||||||
id
|
id
|
||||||
)
|
)
|
||||||
.fetch_one(pool)
|
.fetch_one(pool)
|
||||||
|
@ -84,7 +109,18 @@ impl Account {
|
||||||
pub async fn from_email(pool: &PgPool, email: &String) -> Result<Option<Self>> {
|
pub async fn from_email(pool: &PgPool, email: &String) -> Result<Option<Self>> {
|
||||||
match sqlx::query_as!(
|
match sqlx::query_as!(
|
||||||
Self,
|
Self,
|
||||||
r#"SELECT id, username, email, salt, password, joined, verified as "verified!: bool" FROM Accounts WHERE email = $1;"#,
|
r#"SELECT
|
||||||
|
id,
|
||||||
|
username,
|
||||||
|
email,
|
||||||
|
salt,
|
||||||
|
password,
|
||||||
|
joined,
|
||||||
|
verified as "verified!: bool",
|
||||||
|
follows,
|
||||||
|
followers,
|
||||||
|
permissions
|
||||||
|
FROM Accounts WHERE email = $1;"#,
|
||||||
email
|
email
|
||||||
)
|
)
|
||||||
.fetch_one(pool)
|
.fetch_one(pool)
|
||||||
|
|
|
@ -22,6 +22,9 @@ pub async fn start(port: u16, pool: PgPool) -> Result<()> {
|
||||||
password VARCHAR(96) NOT NULL,
|
password VARCHAR(96) NOT NULL,
|
||||||
joined TIMESTAMP NOT NULL,
|
joined TIMESTAMP NOT NULL,
|
||||||
verified BOOLEAN NOT NULL,
|
verified BOOLEAN NOT NULL,
|
||||||
|
follows BIGINT[],
|
||||||
|
followers BIGINT[],
|
||||||
|
permissions BIGINT NOT NULL,
|
||||||
PRIMARY KEY(id)
|
PRIMARY KEY(id)
|
||||||
);
|
);
|
||||||
"#
|
"#
|
||||||
|
@ -53,6 +56,21 @@ pub async fn start(port: u16, pool: PgPool) -> Result<()> {
|
||||||
.execute(&pool)
|
.execute(&pool)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
sqlx::query!(
|
||||||
|
r#"
|
||||||
|
CREATE TABLE IF NOT EXISTS Projects (
|
||||||
|
id SERIAL8 NOT NULL,
|
||||||
|
name VARCHAR(32) NOT NULL,
|
||||||
|
desription TEXT,
|
||||||
|
created TIMESTAMP NOT NULL,
|
||||||
|
members BIGINT[][] NOT NULL,
|
||||||
|
PRIMARY KEY(id)
|
||||||
|
);
|
||||||
|
"#
|
||||||
|
)
|
||||||
|
.execute(&pool)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let _ = HttpServer::new(move || {
|
let _ = HttpServer::new(move || {
|
||||||
App::new()
|
App::new()
|
||||||
.service(account::calls::register)
|
.service(account::calls::register)
|
||||||
|
|
Loading…
Reference in New Issue