Class: Students_list_DB

Inherits:
Students_list_interface show all
Defined in:
lib/models/students_list/students_list_DB.rb

Instance Method Summary collapse

Instance Method Details

#add_student(student) ⇒ Object



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
# File 'lib/models/students_list/students_list_DB.rb', line 30

def add_student(student)
    query = <<-SQL
        INSERT INTO student (first_name, name, patronymic, birthdate, telegram, email, phone_number, git)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    SQL

    begin
        DB_client.instance.query(query, [
            student.first_name,
            student.name,
            student.patronymic,
            student.birthdate,
            student.telegram,
            student.email,
            student.phone_number,
            student.git
        ])
    rescue Mysql2::Error => e
        if e.message.include?('Duplicate entry')
            raise "Student with this unique value already exists - #{e.message}"
        else
            raise e
        end
    end
end

#delete_student(id) ⇒ Object



83
84
85
86
# File 'lib/models/students_list/students_list_DB.rb', line 83

def delete_student(id)
    query = "DELETE FROM student WHERE id = ?"
    DB_client.instance.query(query, [id])
end

#get_k_n_student_short_list(k, n, filter = nil, data_list = nil) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/models/students_list/students_list_DB.rb', line 17

def get_k_n_student_short_list(k, n, filter = nil, data_list = nil)
    base_query = "SELECT * FROM student"
    filter_query = filter ? filter.apply(base_query) : base_query
    start = (k - 1) * n

    result = DB_client.instance.query(filter_query + " LIMIT ? OFFSET ?", [n, start])
    students_short = result.map { |row| Student_short.new_from_student_obj(Student.new_from_hash(row)) }
    data_list ||= Data_list_student_short.new(students_short)
    data_list.index = start + 1
    data_list.data = students_short
    data_list
end

#get_student_by_id(id) ⇒ Object



9
10
11
12
13
14
15
# File 'lib/models/students_list/students_list_DB.rb', line 9

def get_student_by_id(id)
    result = DB_client.instance.query("SELECT * FROM student WHERE id = ?", [id])
    row = result.first
    return nil unless row

    Student.new_from_hash(row)
end

#get_student_short_count(filter = nil) ⇒ Object



88
89
90
91
92
93
94
# File 'lib/models/students_list/students_list_DB.rb', line 88

def get_student_short_count(filter = nil)
    base_query = "SELECT COUNT(*) AS count FROM student"
    filter_query = filter ? filter.apply(base_query) : base_query

    result = DB_client.instance.query(filter_query)
    result.first['count']
end

#replace_student(id, new_student) ⇒ Object



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
# File 'lib/models/students_list/students_list_DB.rb', line 56

def replace_student(id, new_student)
    query = <<-SQL
        UPDATE student
        SET first_name = ?, name = ?, patronymic = ?, birthdate = ?, telegram = ?, email = ?, phone_number = ?, git = ?
        WHERE id = ?
    SQL
    begin
        DB_client.instance.query(query, [
            new_student.first_name,
            new_student.name,
            new_student.patronymic,
            new_student.birthdate,
            new_student.telegram,
            new_student.email,
            new_student.phone_number,
            new_student.git,
            id
        ])
    rescue Mysql2::Error => e
        if e.message.include?('Duplicate entry')
            raise "Error: Student with this unique value already exists - #{e.message}"
        else
            raise e
        end
    end
end