started "real work"

This commit is contained in:
z1glr
2025-01-10 14:06:53 +00:00
parent e2aa65b416
commit 45f600268f
30 changed files with 9811 additions and 8584 deletions

View File

@@ -4,18 +4,18 @@ import (
"github.com/johannesbuehl/golunteer/backend/pkg/db"
)
type assignments map[string]string
type assignments map[string]*string
type assignemntDB struct {
TaskName string `db:"taskName"`
UserName string `db:"userName"`
TaskName string `db:"taskName"`
UserName *string `db:"userName"`
}
func Event(eventID int) (assignments, error) {
// get the assignments from the database
var assignmentRows []assignemntDB
if err := db.DB.Select(&assignmentRows, "SELECT USERS.name AS userName, TASKS.text AS taskName FROM USER_ASSIGNMENTS JOIN USERS ON USER_ASSIGNMENTS.userName = USERS.name LEFT JOIN TASKS ON USER_ASSIGNMENTS.taskID = TASKS.id WHERE USER_ASSIGNMENTS.eventID = ?", eventID); err != nil {
if err := db.DB.Select(&assignmentRows, "SELECT USERS.name AS userName, TASKS.text AS taskName FROM USER_ASSIGNMENTS LEFT JOIN USERS ON USER_ASSIGNMENTS.userName = USERS.name LEFT JOIN TASKS ON USER_ASSIGNMENTS.taskID = TASKS.id WHERE USER_ASSIGNMENTS.eventID = ?", eventID); err != nil {
return nil, err
} else {
// transform the rows into the returned map

View File

@@ -3,46 +3,70 @@ 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 Event struct {
type EventWithAssignment struct {
eventDataDB
Tasks []string
Assignments map[string]string
Tasks map[string]*string `json:"tasks"`
}
type eventDataDB struct {
Id int `db:"id"`
Date string `db:"date"`
Description string `db:"description"`
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() (Event, error) {
func (e *eventDataDB) Event() (EventWithAssignment, error) {
// get the availabilites associated with the event
if assignemnts, err := assignments.Event(e.Id); err != nil {
return Event{}, err
return EventWithAssignment{}, err
} else {
return Event{
return EventWithAssignment{
eventDataDB: *e,
Assignments: assignemnts,
Tasks: assignemnts,
}, nil
}
}
// get all the event ids
func All() (map[int]eventDataDB, error) {
func All() ([]eventDataDB, error) {
var dbRows []eventDataDB
if err := db.DB.Select(&dbRows, "SELECT * FROM EVENTS"); err != nil {
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 {
eventsMap := map[int]eventDataDB{}
for _, idRow := range dbRows {
eventsMap[idRow.Id] = idRow
}
return eventsMap, nil
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
}
}