73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package events
|
|
|
|
import (
|
|
"github.com/johannesbuehl/golunteer/backend/pkg/db"
|
|
"github.com/johannesbuehl/golunteer/backend/pkg/db/assignments"
|
|
"github.com/johannesbuehl/golunteer/backend/pkg/logger"
|
|
)
|
|
|
|
type EventWithAssignment struct {
|
|
eventDataDB
|
|
Tasks map[string]*string `json:"tasks"`
|
|
}
|
|
|
|
type eventDataDB struct {
|
|
Id int `db:"id" json:"id"`
|
|
Date string `db:"date" json:"date"`
|
|
Description string `db:"description" json:"description"`
|
|
}
|
|
|
|
// transform the database-entry to an Event
|
|
func (e *eventDataDB) Event() (EventWithAssignment, error) {
|
|
// get the availabilites associated with the event
|
|
if assignemnts, err := assignments.Event(e.Id); err != nil {
|
|
return EventWithAssignment{}, err
|
|
} else {
|
|
return EventWithAssignment{
|
|
eventDataDB: *e,
|
|
Tasks: assignemnts,
|
|
}, nil
|
|
}
|
|
}
|
|
|
|
func All() ([]eventDataDB, error) {
|
|
var dbRows []eventDataDB
|
|
|
|
if err := db.DB.Select(&dbRows, "SELECT *, DATE_FORMAT(date, '%Y-%m-%dT%H:%i:%s') as date FROM EVENTS"); err != nil {
|
|
return nil, err
|
|
} else {
|
|
return dbRows, nil
|
|
}
|
|
}
|
|
|
|
func WithAssignments() ([]EventWithAssignment, error) {
|
|
// get all events
|
|
if eventsDB, err := All(); err != nil {
|
|
return nil, err
|
|
} else {
|
|
events := make([]EventWithAssignment, len(eventsDB))
|
|
|
|
for ii, e := range eventsDB {
|
|
if ev, err := e.Event(); err != nil {
|
|
logger.Logger.Error().Msgf("can't get assignments for event with id = %d: %v", e.Id, err)
|
|
} else {
|
|
events[ii] = ev
|
|
}
|
|
}
|
|
|
|
return events, nil
|
|
}
|
|
}
|
|
|
|
func UserPending(userName string) (int, error) {
|
|
var result struct {
|
|
Count int `db:"count(*)"`
|
|
}
|
|
|
|
if err := db.DB.QueryRowx("SELECT count(*) FROM USERS WHERE name = ? AND name NOT IN (SELECT userName FROM USER_AVAILABILITIES)", userName).StructScan(&result); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return result.Count, nil
|
|
}
|
|
}
|