package database
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.tovijaeschke.xyz/tovi/JumboPetstore/models"
|
|
"git.tovijaeschke.xyz/tovi/JumboPetstore/util"
|
|
"gorm.io/gorm/clause"
|
|
)
|
|
|
|
func CreatePet(petData models.Pet) (models.Pet, error) {
|
|
var (
|
|
photoUrl string
|
|
fileName string
|
|
err error
|
|
)
|
|
|
|
err = DB.Omit("PhotoUrlJson").Create(&petData).Error
|
|
if err != nil {
|
|
return petData, err
|
|
}
|
|
|
|
for _, photoUrl = range petData.PhotoUrlJson {
|
|
fileName, err = util.DownloadFile(photoUrl)
|
|
if err != nil {
|
|
return petData, err
|
|
}
|
|
|
|
petData.PhotoUrls = append(petData.PhotoUrls, models.PetPhoto{
|
|
PetId: petData.Id,
|
|
FileName: fileName,
|
|
})
|
|
}
|
|
|
|
petData, err = UpdatePet(petData)
|
|
if err != nil {
|
|
return petData, err
|
|
}
|
|
|
|
return petData, err
|
|
}
|
|
|
|
func UpdatePet(petData models.Pet) (models.Pet, error) {
|
|
var (
|
|
photoUrl string
|
|
err error
|
|
)
|
|
|
|
err = DB.Model(&models.Pet{}).
|
|
Where("id = ?", petData.Id).
|
|
Omit("PhotoUrlJson").
|
|
Updates(&petData).
|
|
Error
|
|
if err != nil {
|
|
return petData, err
|
|
}
|
|
|
|
// Delete existing pet photos
|
|
err = DB.Where("pet_id = ?", petData.ID).
|
|
Delete(&models.PetPhoto{}).
|
|
Error
|
|
if err != nil {
|
|
return petData, err
|
|
}
|
|
|
|
// Update pet photos from PUT data
|
|
for _, photoUrl = range petData.PhotoUrlJson {
|
|
err = DB.Create(&models.PetPhoto{
|
|
PetId: petData.Id,
|
|
Url: photoUrl,
|
|
}).Error
|
|
if err != nil {
|
|
return petData, err
|
|
}
|
|
}
|
|
|
|
return petData, err
|
|
}
|
|
|
|
func GetPetById(id int) models.Pet {
|
|
var (
|
|
petData models.Pet
|
|
petPhoto models.PetPhoto
|
|
photoUrls []string
|
|
)
|
|
|
|
DB.Preload(clause.Associations).First(&petData, "id = ?", id)
|
|
|
|
for _, petPhoto = range petData.PhotoUrls {
|
|
photoUrls = append(photoUrls, "/images/"+petPhoto.FileName)
|
|
}
|
|
|
|
petData.PhotoUrlJson = photoUrls
|
|
|
|
fmt.Println(petData)
|
|
|
|
return petData
|
|
}
|
|
|
|
func DeletePet(petData models.Pet) {
|
|
DB.Where("pet_id = ?", petData.Id).Delete(&petData.Categories)
|
|
DB.Where("pet_id = ?", petData.Id).Delete(&petData.Tags)
|
|
DB.Where("pet_id = ?", petData.Id).Delete(&petData.PhotoUrls)
|
|
DB.Delete(&petData)
|
|
}
|
|
|
|
func GetPetsByStatus(status string) ([]models.Pet, error) {
|
|
var (
|
|
petDatas []models.Pet
|
|
petData models.Pet
|
|
petPhoto models.PetPhoto
|
|
photoUrls []string
|
|
i int
|
|
err error
|
|
)
|
|
|
|
err = DB.Where("status = ?", status).Find(&petDatas).Error
|
|
if err != nil {
|
|
return petDatas, err
|
|
}
|
|
|
|
for i, petData = range petDatas {
|
|
err = DB.Where("pet_id = ?", petData.Id).Find(&petDatas[i].Tags).Error
|
|
if err != nil {
|
|
return petDatas, err
|
|
}
|
|
|
|
err = DB.Where("pet_id = ?", petData.Id).Find(&petDatas[i].PhotoUrls).Error
|
|
if err != nil {
|
|
return petDatas, err
|
|
}
|
|
|
|
for _, petPhoto = range petDatas[i].PhotoUrls {
|
|
photoUrls = append(photoUrls, "/images/"+petPhoto.FileName)
|
|
}
|
|
|
|
petDatas[i].PhotoUrlJson = photoUrls
|
|
}
|
|
|
|
return petDatas, err
|
|
}
|
|
|
|
func AddPhotoToPet(id int, fileName string) error {
|
|
var (
|
|
petData models.Pet
|
|
err error
|
|
)
|
|
|
|
petData = GetPetById(id)
|
|
|
|
petData.PhotoUrls = append(petData.PhotoUrls, models.PetPhoto{
|
|
PetId: id,
|
|
FileName: fileName,
|
|
})
|
|
_, err = UpdatePet(petData)
|
|
|
|
return err
|
|
}
|