show trainers in training list
This commit is contained in:
parent
1742f65fcd
commit
097ecd6dfc
2 changed files with 81 additions and 20 deletions
66
main.go
66
main.go
|
|
@ -241,29 +241,75 @@ func addTrainingAreaHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchTrainings() ([]Training, error) {
|
func fetchTrainings() ([]Training, error) {
|
||||||
log.Println("Fetching trainings from the database")
|
log.Println("Fetching trainings with assigned trainers from the database")
|
||||||
rows, err := db.Query("SELECT id, title, training_type, mode, strftime('%Y-%m-%d %H:%M:%S', start), strftime('%Y-%m-%d %H:%M:%S', end), status FROM trainings")
|
|
||||||
|
query := `
|
||||||
|
SELECT
|
||||||
|
t.id, t.title, t.training_type, t.mode,
|
||||||
|
strftime('%Y-%m-%d %H:%M:%S', t.start), strftime('%Y-%m-%d %H:%M:%S', t.end), t.status,
|
||||||
|
tr.id, tr.name, tr.email
|
||||||
|
FROM trainings t
|
||||||
|
LEFT JOIN training_trainers tt ON t.id = tt.training_id
|
||||||
|
LEFT JOIN trainers tr ON tt.trainer_id = tr.id
|
||||||
|
ORDER BY t.id, tr.name
|
||||||
|
`
|
||||||
|
|
||||||
|
rows, err := db.Query(query)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error fetching trainings: %v", err)
|
log.Printf("Error fetching trainings: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
var trainings []Training
|
trainingMap := make(map[int]*Training)
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var t Training
|
var trainingID int
|
||||||
var start, end string
|
var title, trainingType, mode, status, startStr, endStr string
|
||||||
err := rows.Scan(&t.ID, &t.Title, &t.TrainingType, &t.Mode, &start, &end, &t.Status)
|
var trainerID sql.NullInt64
|
||||||
|
var trainerName sql.NullString
|
||||||
|
var trainerEmail sql.NullString
|
||||||
|
|
||||||
|
err := rows.Scan(&trainingID, &title, &trainingType, &mode, &startStr, &endStr, &status,
|
||||||
|
&trainerID, &trainerName, &trainerEmail)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error scanning row for training: %v", err)
|
log.Printf("Error scanning row for training: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
t.Start, _ = time.Parse(time.DateTime, start)
|
|
||||||
t.End, _ = time.Parse(time.DateTime, end)
|
start, _ := time.Parse(time.DateTime, startStr)
|
||||||
trainings = append(trainings, t)
|
end, _ := time.Parse(time.DateTime, endStr)
|
||||||
|
|
||||||
|
training, exists := trainingMap[trainingID]
|
||||||
|
if !exists {
|
||||||
|
training = &Training{
|
||||||
|
ID: trainingID,
|
||||||
|
Title: title,
|
||||||
|
TrainingType: trainingType,
|
||||||
|
Mode: mode,
|
||||||
|
Start: start,
|
||||||
|
End: end,
|
||||||
|
Status: status,
|
||||||
|
Trainers: []Trainer{},
|
||||||
|
}
|
||||||
|
trainingMap[trainingID] = training
|
||||||
|
}
|
||||||
|
|
||||||
|
if trainerID.Valid {
|
||||||
|
training.Trainers = append(training.Trainers, Trainer{
|
||||||
|
ID: int(trainerID.Int64),
|
||||||
|
Name: trainerName.String,
|
||||||
|
Email: trainerEmail.String,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Found %d trainings", len(trainings))
|
var trainings []Training
|
||||||
|
for _, training := range trainingMap {
|
||||||
|
trainings = append(trainings, *training)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Found %d trainings with trainers", len(trainings))
|
||||||
return trainings, nil
|
return trainings, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@
|
||||||
<p><a href="/trainings/add"><button>Add New Training</button></a></p>
|
<p><a href="/trainings/add"><button>Add New Training</button></a></p>
|
||||||
|
|
||||||
<h1>Trainings</h1>
|
<h1>Trainings</h1>
|
||||||
<table border="1">
|
<table>
|
||||||
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Title</th>
|
<th>Title</th>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
|
|
@ -10,17 +11,31 @@
|
||||||
<th>Start</th>
|
<th>Start</th>
|
||||||
<th>End</th>
|
<th>End</th>
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
|
<th>Trainers</th>
|
||||||
</tr>
|
</tr>
|
||||||
{{ range . }}
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{range .}}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ .Title }}</td>
|
<td>{{.Title}}</td>
|
||||||
<td>{{ .TrainingType }}</td>
|
<td>{{.TrainingType}}</td>
|
||||||
<td>{{ .Mode }}</td>
|
<td>{{.Mode}}</td>
|
||||||
<td>{{ .Start }}</td>
|
<td>{{.Start.Format "2006-01-02 15:04"}}</td>
|
||||||
<td>{{ .End }}</td>
|
<td>{{.End.Format "2006-01-02 15:04"}}</td>
|
||||||
<td>{{ .Status }}</td>
|
<td>{{.Status}}</td>
|
||||||
|
<td>
|
||||||
|
{{if .Trainers}}
|
||||||
|
{{range .Trainers}}
|
||||||
|
{{.Name}} ({{.Email}})<br>
|
||||||
|
{{end}}
|
||||||
|
{{else}}
|
||||||
|
No trainers assigned
|
||||||
|
{{end}}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{ end }}
|
{{end}}
|
||||||
</table>
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
{{template "epilogue.html" }}
|
{{template "epilogue.html" }}
|
||||||
Loading…
Add table
Reference in a new issue