Updated schemas

This commit is contained in:
xeovalyte 2025-01-31 16:11:56 +01:00
parent 55395d279e
commit 6322736baf
Signed by: xeovalyte
SSH Key Fingerprint: SHA256:GWI1hq+MNKR2UOcvk7n9tekASXT8vyazK7vDF9Xyciw
4 changed files with 27 additions and 14 deletions

View File

@ -1,10 +1,10 @@
create table "members" (
id varchar(7) primary key,
first_name text not null,
full_name text not null,
registration_token text unique not null,
CREATE TABLE "members" (
member_id varchar(7) NOT NULL PRIMARY KEY,
first_name text NOT NULL,
full_name text NOT NULL,
registration_token text NOT NULL UNIQUE,
diploma text,
hours text[] not null,
groups text[] not null
hours text[] NOT NULL,
groups text[] NOT NULL
);

View File

@ -0,0 +1,13 @@
CREATE TABLE "users" (
user_id uuid NOT NULL PRIMARY KEY,
email text UNIQUE,
password text NOT NULL,
admin boolean NOT NULL
);
CREATE TABLE IF NOT EXISTS users_members (
user_id uuid NOT NULL REFERENCES users (user_id) ON UPDATE cascade ON DELETE cascade,
member_id varchar(7) NOT NULL REFERENCES members (member_id) ON UPDATE cascade ON DELETE cascade,
CONSTRAINT users_members_pkey PRIMARY KEY (user_id, member_id)
);

View File

@ -5,7 +5,7 @@ use validator::Validate;
#[derive(Debug, Validate)]
pub struct Member {
#[validate(length(equal = 7))]
pub id: String,
pub member_id: String,
pub first_name: String,
pub full_name: String,
pub registration_token: Option<String>,
@ -36,13 +36,13 @@ impl Member {
}
let mut query_builder = QueryBuilder::new(
"INSERT INTO members(id, first_name, full_name, registration_token, diploma, hours, groups) "
"INSERT INTO members(member_id, first_name, full_name, registration_token, diploma, hours, groups) "
);
query_builder.push_values(members.into_iter(), |mut b, member| {
let registration_token = Alphanumeric.sample_string(&mut rand::rng(), 16);
b.push_bind(member.id);
b.push_bind(member.member_id);
b.push_bind(member.first_name);
b.push_bind(member.full_name);
b.push_bind(registration_token);
@ -66,7 +66,7 @@ impl Member {
}
for member in members {
sqlx::query!("UPDATE ONLY members SET first_name = $1, full_name = $2, diploma = $3, hours = $4, groups = $5 WHERE id = $6", member.first_name, member.full_name, member.diploma, &member.hours, &member.groups, member.id).execute(&mut **transaction).await?;
sqlx::query!("UPDATE ONLY members SET first_name = $1, full_name = $2, diploma = $3, hours = $4, groups = $5 WHERE member_id = $6", member.first_name, member.full_name, member.diploma, &member.hours, &member.groups, member.member_id).execute(&mut **transaction).await?;
}
Ok(())
@ -78,7 +78,7 @@ impl Member {
) -> Result<(), sqlx::Error> {
sqlx::query!(
"
DELETE FROM members WHERE id = ANY($1)
DELETE FROM members WHERE member_id = ANY($1)
",
member_ids
)

View File

@ -18,7 +18,7 @@ use crate::database::model::Member as DbMember;
impl From<DbMember> for Member {
fn from(value: DbMember) -> Self {
Member {
id: value.id,
id: value.member_id,
name: Name {
first: value.first_name,
full: value.full_name,
@ -34,7 +34,7 @@ impl From<DbMember> for Member {
impl From<Member> for DbMember {
fn from(value: Member) -> Self {
DbMember {
id: value.id,
member_id: value.id,
first_name: value.name.first,
full_name: value.name.full,
registration_token: None,