diff --git a/server/migrations/001_create_members.sql b/server/migrations/001_create_members.sql index c7c469f..2ed1846 100644 --- a/server/migrations/001_create_members.sql +++ b/server/migrations/001_create_members.sql @@ -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 ); diff --git a/server/migrations/002_create_users.sql b/server/migrations/002_create_users.sql new file mode 100644 index 0000000..d9c888c --- /dev/null +++ b/server/migrations/002_create_users.sql @@ -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) +); diff --git a/server/src/database/model/member.rs b/server/src/database/model/member.rs index 5e4b74c..e4e8367 100644 --- a/server/src/database/model/member.rs +++ b/server/src/database/model/member.rs @@ -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, @@ -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 ) diff --git a/server/src/model/member.rs b/server/src/model/member.rs index 1d5d274..3d398a1 100644 --- a/server/src/model/member.rs +++ b/server/src/model/member.rs @@ -18,7 +18,7 @@ use crate::database::model::Member as DbMember; impl From 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 for Member { impl From 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,