diff --git a/api/devices.go b/api/devices.go index a4458dbab1ace5a710b244cb1b638a83598f6aa3..323c8a6d2fb1cf62ca77a1c01ad41e44ea928868 100644 --- a/api/devices.go +++ b/api/devices.go @@ -4,9 +4,52 @@ import ( "encoding/json" "github.com/gorilla/mux" "jewels/database" + "log" "net/http" + "strings" + "time" ) +func downloadAndUpdateDeviceEol(device database.Device) { + if strings.ToLower(device.Manufacturer) == "samsung" && device.Type != database.Computer && device.Type != database.Other { + res, err := http.Get("https://endoflife.date/api/samsung-mobile.json") + if err != nil { + return + } + + type responseDevice struct { + Cycle string `json:"cycle"` + Eol any `json:"eol"` + } + + decoder := json.NewDecoder(res.Body) + var devices []responseDevice + err = decoder.Decode(&devices) + if err != nil { + return + } + + for _, d := range devices { + if strings.ToLower(d.Cycle) == strings.ToLower(device.Model) { + eolString, ok := d.Eol.(string) + if ok { + eol, err := time.Parse("2006-01-02", eolString) + if err != nil { + return + } + + device.Eol = &eol + err = database.UpdateJewel(device.OwnerId, device) + if err != nil { + log.Println(err) + return + } + } + } + } + } +} + func getDevices(w http.ResponseWriter, r *http.Request) { encoder := json.NewEncoder(w) vars := mux.Vars(r) @@ -54,6 +97,8 @@ func createDevice(w http.ResponseWriter, r *http.Request) { return } + downloadAndUpdateDeviceEol(*device) + encoder := json.NewEncoder(w) w.WriteHeader(http.StatusCreated) encoder.Encode(device) @@ -89,6 +134,11 @@ func updateDevice(w http.ResponseWriter, r *http.Request) { return } + jewel, err := database.FindJewelById(body.Id) + if err == nil && jewel != nil { + downloadAndUpdateDeviceEol(*jewel) + } + w.WriteHeader(http.StatusNoContent) } @@ -113,5 +163,10 @@ func pushDeviceData(w http.ResponseWriter, r *http.Request) { return } + jewel, err := database.FindJewelById(body.Id) + if err == nil && jewel != nil { + downloadAndUpdateDeviceEol(*jewel) + } + w.WriteHeader(http.StatusNoContent) }