admin-dashboard-backend/modules/equipment/equipment.go

100 lines
2.6 KiB
Go

package equipment
import (
"encoding/json"
"errors"
"jannex/admin-dashboard-backend/modules/database"
"jannex/admin-dashboard-backend/modules/structs"
"github.com/gofiber/fiber/v2"
"github.com/rs/zerolog/log"
"gorm.io/gorm"
)
const Base = "https://inv.ex.umbach.dev"
const apiBase = Base + "/api"
const ApiToken = "1367f15d21935e4eb540f897946fb5cd98485c3f"
func GetEquipmentDocumentation(stockItemId string, c *fiber.Ctx) error {
equipment := structs.Equipment{Id: stockItemId}
if err := database.DB.Where("id = ?", stockItemId).First(&equipment).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
log.Info().Msgf("a %s", err)
log.Error().Msgf("Failed to get equipment, err: %s", err)
return c.JSON([]structs.EquipmentDocumentation{})
}
// if equipment already exists, return the documentation
if equipment.Name != "" {
var equipmentDocumentations []structs.EquipmentDocumentation
database.DB.Where("equipment_id = ?", stockItemId).Find(&equipmentDocumentations)
return c.JSON(equipmentDocumentations)
}
// create new equipment
a := fiber.AcquireAgent()
a.Add("Authorization", "Token "+ApiToken)
req := a.Request()
req.Header.SetMethod(fiber.MethodGet)
req.SetRequestURI(apiBase + "/stock/" + stockItemId + "/")
if err := a.Parse(); err != nil {
log.Error().Msgf("Failed to parse request, err: %s", err)
return c.SendStatus(fiber.StatusInternalServerError)
}
code, body, _ := a.Bytes()
if code == 401 {
log.Error().Msgf("invex not authorized, code: %d", code)
return c.SendStatus(fiber.StatusInternalServerError)
}
if code == 404 {
log.Error().Msgf("Inven stock item not found, code: %d", code)
return c.SendStatus(fiber.StatusNotFound)
}
// parse body as json
var data map[string]interface{}
if err := json.Unmarshal(body, &data); err != nil {
log.Error().Msgf("Failed to unmarshal json, err: %s", err)
return c.SendStatus(fiber.StatusInternalServerError)
}
partDetail := data["part_detail"].(map[string]interface{})
database.DB.Create(&structs.Equipment{
Id: stockItemId,
Name: partDetail["name"].(string),
Thumbnail: partDetail["thumbnail"].(string),
})
return c.JSON([]structs.EquipmentDocumentation{})
}
func GetEquipment() []structs.Equipment {
var equipments []structs.Equipment
database.DB.Find(&equipments)
return equipments
}
/*
// return whether the scanned equipment is existing in the database
func IsEquipmentExisting(stockItemId string) bool {
var equipment structs.Equipment
database.DB.Where("id = ?", stockItemId).FirstOrCreate(&equipment)
return equipment.Id != ""
} */