-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbd_funcs_script.txt
More file actions
90 lines (83 loc) · 2.12 KB
/
bd_funcs_script.txt
File metadata and controls
90 lines (83 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
CREATE FUNCTION add_user(
p_login VARCHAR,
p_password VARCHAR,
p_birth_date INT,
p_height REAL,
p_goal VARCHAR,
p_fitness_level INT,
p_activity_level INT,
p_available_days INT
) RETURNS INT AS $$
DECLARE
new_user_id INT;
BEGIN
INSERT INTO users (
login, password, birth_date, height, goal, fitness_level, activity_level, available_days, role
) VALUES (
p_login, p_password, p_birth_date, p_height, p_goal, p_fitness_level, p_activity_level, p_available_days, 'user'
) RETURNING user_id INTO new_user_id;
RETURN new_user_id;
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION add_admin(
p_login VARCHAR,
p_password VARCHAR
) RETURNS INT AS $$
DECLARE
new_admin_id INT;
BEGIN
INSERT INTO users (
login, password, role
) VALUES (
p_login, p_password, 'admin'
) RETURNING user_id INTO new_admin_id;
RETURN new_admin_id;
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION get_user_achievements(p_user_id INT)
RETURNS TABLE (
achievement_id INT,
name VARCHAR,
description VARCHAR,
when_created DATE
) AS $$
BEGIN
RETURN QUERY
SELECT a.achievement_id, a.name, a.description, a.when_created
FROM user_achievement ua
JOIN achievement a ON ua.achievement_id = a.achievement_id
WHERE ua.user_id = p_user_id;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION get_exercises_for_training_day(
p_training_day_id INT
) RETURNS TABLE (
exercise_id INT,
exercise_name VARCHAR,
muscle_group VARCHAR,
description VARCHAR
) AS $$
BEGIN
RETURN QUERY
SELECT
e.exercise_id,
e.name AS exercise_name,
e.muscle_group,
e.description
FROM
exercise_training_day etd
JOIN exercises e ON etd.exercise_id = e.exercise_id
WHERE
etd.training_day_id = p_training_day_id;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION get_user_allergies(p_user_id INT)
RETURNS TABLE(allergy_name VARCHAR) AS $$
BEGIN
RETURN QUERY
SELECT a.name
FROM user_allergy ua
JOIN allergies a ON ua.allergy_id = a.allergy_id
WHERE ua.user_id = p_user_id;
END;
$$ LANGUAGE plpgsql;