1 | CREATE TABLE users (
|
---|
2 | user_id SERIAL PRIMARY KEY,
|
---|
3 | username VARCHAR(50) UNIQUE NOT NULL,
|
---|
4 | first_name VARCHAR(50) NOT NULL,
|
---|
5 | last_name VARCHAR(50) NOT NULL,
|
---|
6 | email VARCHAR(100) UNIQUE NOT NULL,
|
---|
7 | birth_date DATE NOT NULL,
|
---|
8 | gender VARCHAR(10) NOT NULL,
|
---|
9 | phone VARCHAR(20),
|
---|
10 | password VARCHAR(255) NOT NULL,
|
---|
11 | address_street VARCHAR(100) NOT NULL,
|
---|
12 | address_number INT,
|
---|
13 | address_city VARCHAR(50) NOT NULL,
|
---|
14 | role VARCHAR(20) NOT NULL CHECK (role IN ('donor','volunteer','medical','institution','admin'))
|
---|
15 | );
|
---|
16 |
|
---|
17 |
|
---|
18 | CREATE TABLE donation_types (
|
---|
19 | type_id SERIAL PRIMARY KEY,
|
---|
20 | name VARCHAR(50) NOT NULL
|
---|
21 | );
|
---|
22 |
|
---|
23 |
|
---|
24 | CREATE TABLE donation_actions (
|
---|
25 | action_id SERIAL PRIMARY KEY,
|
---|
26 | title VARCHAR(100) NOT NULL,
|
---|
27 | description TEXT NOT NULL,
|
---|
28 | type VARCHAR(20) NOT NULL CHECK (type IN ('physical','online')),
|
---|
29 | start_date DATE NOT NULL,
|
---|
30 | end_date DATE NOT NULL,
|
---|
31 | created_by INT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE
|
---|
32 |
|
---|
33 | );
|
---|
34 |
|
---|
35 |
|
---|
36 | CREATE TABLE physical_actions (
|
---|
37 | action_id INT PRIMARY KEY REFERENCES donation_actions(action_id) ON DELETE CASCADE,
|
---|
38 | location VARCHAR(100) NOT NULL,
|
---|
39 | needed_people INT NOT NULL
|
---|
40 | );
|
---|
41 |
|
---|
42 | -- Online Actions
|
---|
43 | CREATE TABLE online_actions (
|
---|
44 | action_id INT PRIMARY KEY REFERENCES donation_actions(action_id) ON DELETE CASCADE,
|
---|
45 | bank_account VARCHAR(50) NOT NULL
|
---|
46 | );
|
---|
47 |
|
---|
48 |
|
---|
49 | CREATE TABLE participation (
|
---|
50 | participation_id SERIAL PRIMARY KEY,
|
---|
51 | user_id INT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
|
---|
52 | action_id INT NOT NULL REFERENCES donation_actions(action_id) ON DELETE CASCADE,
|
---|
53 | role VARCHAR(20) NOT NULL,
|
---|
54 | UNIQUE(user_id, action_id)
|
---|
55 | );
|
---|
56 |
|
---|
57 |
|
---|
58 | CREATE TABLE donations (
|
---|
59 | donation_id SERIAL PRIMARY KEY,
|
---|
60 | user_id INT NOT NULL REFERENCES users(user_id),
|
---|
61 | action_id INT NOT NULL REFERENCES donation_actions(action_id),
|
---|
62 | type_id INT NOT NULL REFERENCES donation_types(type_id),
|
---|
63 | quantity INT,
|
---|
64 | amount DECIMAL(10,2),
|
---|
65 | donated_at TIMESTAMP DEFAULT NOW()
|
---|
66 | );
|
---|
67 |
|
---|
68 |
|
---|
69 | CREATE TABLE action_requests (
|
---|
70 | request_id SERIAL PRIMARY KEY,
|
---|
71 | user_id INT NOT NULL REFERENCES users(user_id),
|
---|
72 | title VARCHAR(100) NOT NULL,
|
---|
73 | description TEXT NOT NULL,
|
---|
74 | type VARCHAR(20) NOT NULL CHECK (type IN ('physical','online')),
|
---|
75 | created_at DATE NOT NULL DEFAULT CURRENT_DATE,
|
---|
76 | approved_at DATE,
|
---|
77 | status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending','approved','rejected'))
|
---|
78 | );
|
---|
79 |
|
---|
80 |
|
---|
81 | CREATE TABLE sponsors (
|
---|
82 | sponsor_id SERIAL PRIMARY KEY,
|
---|
83 | name VARCHAR(100) NOT NULL,
|
---|
84 | phone VARCHAR(20),
|
---|
85 | email VARCHAR(100),
|
---|
86 | address_street VARCHAR(100),
|
---|
87 | address_number INT,
|
---|
88 | address_city VARCHAR(50)
|
---|
89 | );
|
---|
90 |
|
---|