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" ( CREATE TABLE "members" (
id varchar(7) primary key, member_id varchar(7) NOT NULL PRIMARY KEY,
first_name text not null, first_name text NOT NULL,
full_name text not null, full_name text NOT NULL,
registration_token text unique not null, registration_token text NOT NULL UNIQUE,
diploma text, diploma text,
hours text[] not null, hours text[] NOT NULL,
groups 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)] #[derive(Debug, Validate)]
pub struct Member { pub struct Member {
#[validate(length(equal = 7))] #[validate(length(equal = 7))]
pub id: String, pub member_id: String,
pub first_name: String, pub first_name: String,
pub full_name: String, pub full_name: String,
pub registration_token: Option<String>, pub registration_token: Option<String>,
@ -36,13 +36,13 @@ impl Member {
} }
let mut query_builder = QueryBuilder::new( 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| { query_builder.push_values(members.into_iter(), |mut b, member| {
let registration_token = Alphanumeric.sample_string(&mut rand::rng(), 16); 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.first_name);
b.push_bind(member.full_name); b.push_bind(member.full_name);
b.push_bind(registration_token); b.push_bind(registration_token);
@ -66,7 +66,7 @@ impl Member {
} }
for member in members { 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(()) Ok(())
@ -78,7 +78,7 @@ impl Member {
) -> Result<(), sqlx::Error> { ) -> Result<(), sqlx::Error> {
sqlx::query!( sqlx::query!(
" "
DELETE FROM members WHERE id = ANY($1) DELETE FROM members WHERE member_id = ANY($1)
", ",
member_ids member_ids
) )

View File

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