Der Umstieg auf Sessions ist weitgehend geglückt

This commit is contained in:
2023-10-28 08:01:34 +02:00
parent aded71394d
commit 5049db064c
11 changed files with 396 additions and 225 deletions

View File

@ -120,7 +120,7 @@ func (db *DB) WriteParticipant(p *types.Participant) error {
return nil
}
func (db *DB) WriteGivenAnswer(b *types.Briefing, p *types.Participant, q *types.Question, g *types.GivenAnswer) error {
func (db *DB) WriteGivenAnswer(b *types.Briefing, p *types.Participant, q *types.Question, g int) error {
_, err := db.Exec(`
INSERT INTO given_answers
(briefing_id, participant_id, question_id, given_answer)
@ -147,7 +147,7 @@ func (db *DB) WriteAllDataOfBriefing(b *types.Briefing, sp *[]*types.Participant
for _, p := range *sp {
for i, q := range *sq {
db.WriteGivenAnswer(b, p, q, (*sg)[i])
db.WriteGivenAnswer(b, p, q, i)
}
}
@ -302,11 +302,12 @@ func (db *DB) GetInstructors() ([]*types.Instructor, error) {
if err != nil {
return nil, fmt.Errorf("*DB.GetInstructors: db.Query(): %v\n", err)
}
defer rows.Close()
instructors := make([]*types.Instructor, 0)
for rows.Next() {
instructor := new(types.Instructor)
if err = rows.Scan(&instructor.ID, &instructor.FirstName, &instructor.LastName, &instructor.PersonnelID); err != nil {
if err = rows.Scan(&instructor.ID, &instructor.FirstName, &instructor.LastName); err != nil {
return nil, fmt.Errorf("*DB.GetInstructors: rows.Scan(): %v\n", err)
}
instructors = append(instructors, instructor)
@ -314,3 +315,67 @@ func (db *DB) GetInstructors() ([]*types.Instructor, error) {
return instructors, nil
}
func (db *DB) GetQuestions(nums []string) ([]types.Question, error) {
rows, err := db.Query(`
SELECT *
FROM questions
WHERE id IN (` + strings.Join(nums, ", ") + `)
`)
if err != nil {
return nil, fmt.Errorf("*DB.GetQuestions: db.Query(): %v\n", err)
}
defer rows.Close()
questions := make([]types.Question, 0)
for rows.Next() {
q := new(types.Question)
a1 := new(types.Answer)
a2 := new(types.Answer)
a3 := new(types.Answer)
a4 := new(types.Answer)
a1.ID = 1
a2.ID = 2
a3.ID = 3
a4.ID = 4
if err := rows.Scan(&q.ID, &q.Text, &a1.Text, &a2.Text, &a3.Text, &a4.Text, &q.Correct); err != nil {
return nil, fmt.Errorf("*DB.GetQuestions: rows.Scan(): %v\n", err)
}
q.Answers = append(q.Answers, *a1)
q.Answers = append(q.Answers, *a2)
q.Answers = append(q.Answers, *a3)
q.Answers = append(q.Answers, *a4)
questions = append(questions, *q)
}
return questions, nil
}
func (db *DB) GetGivenAnswers(bid, pid int64, sq []types.Question) ([]int, error) {
answers := make([]int, 0)
query := `
SELECT given_answer
FROM given_answers
WHERE
briefing_id = ? AND
participant_id = ? AND
question_id = ?
`
for _, q := range sq {
var answer int
row := db.QueryRow(query, bid, pid, q.ID)
if err := row.Scan(&answer); err != nil {
return nil, fmt.Errorf("*DB.GetGivenAnswers: row.Scan(): %v\n", err)
}
answers = append(answers, answer)
}
return answers, nil
}