-
Notifications
You must be signed in to change notification settings - Fork 2
/
crud.py
226 lines (155 loc) · 7.07 KB
/
crud.py
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
"""
CRUD operations.
"""
import deprecation
from model import db, Teacher, Student, Log, Note, connect_to_db
from sqlalchemy import func
#______________________functions for creating table records___________________________#
def create_teacher(teacher_fname,
teacher_lname,
teacher_email,
teacher_phone,
teacher_password):
"""Creates a new teacher record"""
if not teacher_email:
raise ValueError(f'{teacher_email=}')
# Check if email is already in use:
if teacher := db.session.query(Teacher).filter_by(teacher_email=teacher_email).first():
# Either return False which will cause an error – or return the teacher
return False
teacher = Teacher(teacher_fname=teacher_fname,
teacher_lname=teacher_lname,
teacher_email=teacher_email,
teacher_phone=teacher_phone,
teacher_password=teacher_password
)
db.session.add(teacher)
db.session.commit()
db.session.refresh(teacher)
return teacher
def create_student(student_fname,
student_lname,
student_email,
program_name,
instrument,
student_password,
student_phone,
teacher_id):
"""Creates a new student record"""
student = Student(student_fname=student_fname,
student_lname=student_lname,
student_email=student_email,
program_name=program_name,
instrument=instrument,
student_password=student_password,
student_phone=student_phone,
teacher_id=teacher_id
)
db.session.add(student)
db.session.commit()
return student
def create_log(log_date,
student_id,
minutes_practiced,
pieces_practiced,
practice_notes):
"""Creates a new practice log record"""
log = Log(log_date=log_date,
student_id=student_id,
minutes_practiced=minutes_practiced,
pieces_practiced=pieces_practiced,
practice_notes=practice_notes
)
db.session.add(log)
db.session.commit()
return log
def create_note(teacher_id,
student_id,
note_created_at,
note_content):
"""Creates a new teacher note record"""
# Allows querying of student by full name
# instead of querying by hybrid attribute
# student_id = db.session.query(Student.student_id)\
# .filter(
# func.concat(
# Student.student_fname,
# ' ',
# Student.student_lname
# ) == note_student_name
# ).first()
# Only allow if student id exists
# if not student_id:
# return None
note = Note(teacher_id=teacher_id,
student_id=student_id,
note_created_at=note_created_at,
note_content=note_content
)
db.session.add(note)
db.session.commit()
return note
#__________________________functions for User verification___________________________#
def verify_teacher(teacher_email, teacher_password):
"""Validates teacher email and password by finding matches in the database"""
return Teacher.query.filter(Teacher.teacher_email == teacher_email,
Teacher.teacher_password == teacher_password).first()
def verify_student(student_email, student_password):
"""Validates student email and password by finding matches in the database"""
return Student.query.filter(Student.student_email == student_email,
Student.student_password == student_password).first()
def check_teacher_email(teacher_email):
"""Return database row that matches given email."""
return Teacher.query.filter(Teacher.teacher_email == teacher_email).first()
def check_student_email(student_email):
"""Return database row that matches given email."""
return Student.query.filter(Student.student_email == student_email).first()
#__________________________functions for User verification___________________________#
def get_student_by_email(student_email):
"""Finds all student info"""
return Student.query.filter(Student.student_email == student_email).first()
def get_teacher_by_email(teacher_email):
"""Finds all teacher info"""
return Teacher.query.filter(Teacher.teacher_email == teacher_email).first()
def get_teacher_by_id(teacher_id):
"""Finds all teacher info by teacher ID"""
return Teacher.query.get(teacher_id)
def get_student_by_id(student_id):
"""Finds all student info by student ID"""
return Student.query.get(student_id)
def get_students_by_teacher_id(teacher_id):
"""Finds all students who belong to a particular teacher's studio"""
return Student.query.filter(Student.teacher_id == teacher_id).order_by(Student.student_id.desc()).all()
#__________________________functions for Notes/Logs___________________________#
@deprecation.deprecated(details="Use the relationship `teacher.notes` instead")
def get_notes_by_teacher_id(teacher_id):
""" Finds all notes submitted by a specific teacher using their teacher ID """
return Note.query.filter(Note.teacher_id == teacher_id).order_by(Note.note_id).all()
@deprecation.deprecated(details="Use the relationship `child.logs` instead")
def get_logs_by_student_id(student_id):
"""
Finds all logs submitted by a specific student using their student ID
"""
return Log.query.filter(Log.student_id == student_id).order_by(Log.log_date.desc()).all()
def get_minutes_practiced(student_id):
""" Procures all minutes-practiced data per student """
return Log.query.get(student_id)
def search_logs_by_date(log_date, student_id):
"""Finds all kigs written by a student on a particular date"""
return Log.query.filter(Log.log_date == log_date, Log.student_id == student_id).first()
#__________________________functions for Assigning Teachers___________________________#
def group_students_by_teacher(private_teacher, student_id):
""" Locates all students by their private teacher's name """
return Student.query.filter(Student.private_teacher == private_teacher).order_by(Student.student_id.desc()).all()
def get_student_phone(student_id):
"""Pulls the phone number of a specific student for text messaging"""
return Student.query.filter(Student.student_id == student_id).first()
def get_full_student_name(student_id):
"""Grabs first and last name of a student using their student ID number"""
student = Student.query.filter(Student.student_id == student_id).first()
student_full_name = student.student_fname + ' ' + student.student_lname
return student_full_name
# ------------------------------------------------------------------------------
if __name__ == '__main__':
from server import app
connect_to_db(app)