92 lines
2.2 KiB
Go
92 lines
2.2 KiB
Go
package health
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
"sync"
|
|
|
|
"github.com/eternal-flame-AD/yoake/internal/db"
|
|
"github.com/eternal-flame-AD/yoake/internal/echoerror"
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
func RESTMedGetDirections(db db.DB) func(c echo.Context) error {
|
|
return func(c echo.Context) error {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
c.Error(echoerror.NewHttp(500, fmt.Errorf("internal error: %v", err)))
|
|
}
|
|
}()
|
|
meds, err := DBMedListGet(db)
|
|
if err != nil {
|
|
return echoerror.NewHttp(500, err)
|
|
}
|
|
return c.JSON(200, meds)
|
|
}
|
|
}
|
|
|
|
func RESTMedPostDirections(db db.DB, writeMutex *sync.Mutex) func(c echo.Context) error {
|
|
return func(c echo.Context) error {
|
|
var input Direction
|
|
if err := c.Bind(&input); err != nil {
|
|
return echoerror.NewHttp(400, err)
|
|
}
|
|
if input.Name == "" {
|
|
return echoerror.NewHttp(400, fmt.Errorf("name cannot be empty"))
|
|
}
|
|
if input.Dosage <= 0 {
|
|
return echoerror.NewHttp(400, fmt.Errorf("dosage must be positive"))
|
|
}
|
|
if input.PeriodHours <= 0 {
|
|
return echoerror.NewHttp(400, fmt.Errorf("period must be positive"))
|
|
}
|
|
writeMutex.Lock()
|
|
defer writeMutex.Unlock()
|
|
meds, err := DBMedListGet(db)
|
|
if err != nil {
|
|
return echoerror.NewHttp(500, err)
|
|
}
|
|
found := false
|
|
for i, med := range meds {
|
|
if med.KeyName() == input.KeyName() {
|
|
meds[i] = input
|
|
found = true
|
|
}
|
|
}
|
|
if !found {
|
|
meds = append(meds, input)
|
|
}
|
|
if err := DBMedListSet(db, meds); err != nil {
|
|
return echoerror.NewHttp(500, err)
|
|
}
|
|
return c.JSON(200, meds)
|
|
}
|
|
}
|
|
|
|
func RESTMedDeleteDirections(db db.DB, writeMutex *sync.Mutex) func(c echo.Context) error {
|
|
return func(c echo.Context) error {
|
|
name := c.Param("name")
|
|
writeMutex.Lock()
|
|
defer writeMutex.Unlock()
|
|
meds, err := DBMedListGet(db)
|
|
if err != nil {
|
|
return echoerror.NewHttp(500, err)
|
|
}
|
|
found := false
|
|
for i, med := range meds {
|
|
if strings.EqualFold(med.KeyName(), name) {
|
|
meds = append(meds[:i], meds[i+1:]...)
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
return echoerror.NewHttp(404, fmt.Errorf("med not found"))
|
|
}
|
|
if err := DBMedListSet(db, meds); err != nil {
|
|
return echoerror.NewHttp(500, err)
|
|
}
|
|
return c.NoContent(http.StatusNoContent)
|
|
}
|
|
}
|