implemented assigning users to events
This commit is contained in:
@@ -9,7 +9,9 @@ type eventAvailabilities struct {
|
||||
AvailabilityID int `db:"availabilityID"`
|
||||
}
|
||||
|
||||
func Event(eventID int) (map[string]string, error) {
|
||||
type AvailabilityMap map[int][]string
|
||||
|
||||
func Event(eventID int) (AvailabilityMap, error) {
|
||||
// get the availabilities for the event
|
||||
var availabilitiesRows []eventAvailabilities
|
||||
|
||||
@@ -17,17 +19,18 @@ func Event(eventID int) (map[string]string, error) {
|
||||
return nil, err
|
||||
} else {
|
||||
// transform the result into a map
|
||||
eventAvailabilities := map[string]string{}
|
||||
eventAvailabilities := AvailabilityMap{}
|
||||
|
||||
// get the availabilities
|
||||
if availabilitiesMap, err := Keys(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
for _, a := range availabilitiesRows {
|
||||
eventAvailabilities[a.UserName] = availabilitiesMap[a.AvailabilityID].AvailabilityName
|
||||
for _, a := range availabilitiesRows {
|
||||
// if there is no slice for this availability, create it
|
||||
if _, exists := eventAvailabilities[a.AvailabilityID]; !exists {
|
||||
eventAvailabilities[a.AvailabilityID] = make([]string, 0)
|
||||
}
|
||||
|
||||
return eventAvailabilities, nil
|
||||
eventAvailabilities[a.AvailabilityID] = append(eventAvailabilities[a.AvailabilityID], a.UserName)
|
||||
}
|
||||
|
||||
return eventAvailabilities, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ type EventWithAssignment struct {
|
||||
|
||||
type EventWithAvailabilities struct {
|
||||
EventWithAssignment
|
||||
Availabilities map[string]string `json:"availabilities"`
|
||||
Availabilities availabilities.AvailabilityMap `json:"availabilities"`
|
||||
}
|
||||
|
||||
type EventCreate struct {
|
||||
@@ -268,8 +268,22 @@ func User(userName string) ([]EventWithAssignment, error) {
|
||||
}
|
||||
|
||||
// set the availability of an user for a specific event
|
||||
func UserAvailability(userName string, eventID, availabilityID int) error {
|
||||
func UserAvailability(eventID, availabilityID int, userName string) error {
|
||||
_, err := db.DB.Exec("INSERT INTO USER_AVAILABILITIES (userName, eventID, availabilityID) VALUES ($1, $2, $3) ON CONFLICT (userName, eventID) DO UPDATE SET availabilityID = $3", userName, eventID, availabilityID)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// set the assignment of an user to a task for a specific event
|
||||
func SetAssignment(eventID, taskID int, userName string) error {
|
||||
_, err := db.DB.Exec("UPDATE USER_ASSIGNMENTS SET userName = $1 WHERE eventID = $2 AND taskID = $3", userName, eventID, taskID)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// remove the assignment of an user
|
||||
func DeleteAssignment(eventID, taskID int) error {
|
||||
_, err := db.DB.Exec("UPDATE USER_ASSIGNMENTS SET userName = null WHERE eventID = $1 AND taskID = $2", eventID, taskID)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -137,14 +137,74 @@ func (a *Handler) putEventUserAvailability() {
|
||||
logger.Log().Msgf("setting user-event-availability failed: can't get parse: %v", err)
|
||||
|
||||
// insert the availability into the database
|
||||
} else if err := events.UserAvailability(a.UserName, eventID, availabilityID); err != nil {
|
||||
} else if err := events.UserAvailability(eventID, availabilityID, a.UserName); err != nil {
|
||||
a.Status = fiber.StatusInternalServerError
|
||||
|
||||
logger.Error().Msgf("setting user-event-availability failed: can't write availability to database: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Handler) putEventAssignment() {
|
||||
// check admin
|
||||
if !a.Admin {
|
||||
a.Status = fiber.StatusUnauthorized
|
||||
|
||||
logger.Warn().Msg("setting event-assignment failed: user is no admin")
|
||||
|
||||
// retrieve the eventID from the query
|
||||
} else if eventID := a.C.QueryInt("eventID", -1); eventID == -1 {
|
||||
a.Status = fiber.StatusBadRequest
|
||||
|
||||
logger.Warn().Msg("setting event-assignment failed: query is missing \"eventID\"")
|
||||
|
||||
// retrieve the taskID from the query
|
||||
} else if taskID := a.C.QueryInt("taskID", -1); taskID == -1 {
|
||||
a.Status = fiber.StatusBadRequest
|
||||
|
||||
logger.Warn().Msg("setting event-assignment failed: query is missing \"taskID\"")
|
||||
|
||||
// parse the body
|
||||
} else if userName := string(a.C.Body()); userName == "" {
|
||||
a.Status = fiber.StatusBadRequest
|
||||
|
||||
logger.Warn().Msg("setting event-assignment failed: body is missing")
|
||||
|
||||
// set the availability in the database
|
||||
} else if err := events.SetAssignment(eventID, taskID, userName); err != nil {
|
||||
a.Status = fiber.StatusBadRequest
|
||||
|
||||
logger.Warn().Msgf("setting event-assignment failed: can't write to database: %v", err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (a *Handler) deleteEventAssignment() {
|
||||
// check admin
|
||||
if !a.Admin {
|
||||
a.Status = fiber.StatusUnauthorized
|
||||
|
||||
logger.Warn().Msg("deleting event-assignment failed: user is no admin")
|
||||
|
||||
// retrieve the eventID from the query
|
||||
} else if eventID := a.C.QueryInt("eventID", -1); eventID == -1 {
|
||||
a.Status = fiber.StatusBadRequest
|
||||
|
||||
logger.Warn().Msg("deleting event-assignment failed: query is missing \"eventID\"")
|
||||
|
||||
// retrieve the taskID from the query
|
||||
} else if taskID := a.C.QueryInt("taskID", -1); taskID == -1 {
|
||||
a.Status = fiber.StatusBadRequest
|
||||
|
||||
logger.Warn().Msg("deleting event-assignment failed: query is missing \"taskID\"")
|
||||
|
||||
// set the availability in the database
|
||||
} else if err := events.DeleteAssignment(eventID, taskID); err != nil {
|
||||
a.Status = fiber.StatusBadRequest
|
||||
|
||||
logger.Warn().Msgf("deleting event-assignment failed: can't write to database: %v", err)
|
||||
}
|
||||
|
||||
// parse the body
|
||||
}
|
||||
|
||||
func (a *Handler) deleteEvent() {
|
||||
|
||||
@@ -107,14 +107,16 @@ func init() {
|
||||
"tasks": (*Handler).patchTask, // modify a task
|
||||
},
|
||||
"PUT": {
|
||||
"users/password": (*Handler).putPassword, // change the password
|
||||
"events/user/availability": (*Handler).putEventUserAvailability, // set or change the users availability for a specific event
|
||||
"events/assignments": (*Handler).putEventAssignment,
|
||||
"users/password": (*Handler).putPassword, // change the password
|
||||
},
|
||||
"DELETE": {
|
||||
"event": (*Handler).deleteEvent, // remove an event
|
||||
"tasks": (*Handler).deleteTask, // remove a task
|
||||
"availabilities": (*Handler).deleteAvailability, // remove an availability
|
||||
"users": (*Handler).deleteUser, // remove an user
|
||||
"event": (*Handler).deleteEvent, // remove an event
|
||||
"events/assignments": (*Handler).deleteEventAssignment,
|
||||
"tasks": (*Handler).deleteTask, // remove a task
|
||||
"availabilities": (*Handler).deleteAvailability, // remove an availability
|
||||
"users": (*Handler).deleteUser, // remove an user
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user