mirror of
https://github.com/Warky-Devs/ResolveSpec.git
synced 2025-05-18 20:57:29 +00:00
68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
package resolvespec
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/Warky-Devs/ResolveSpec/pkg/logger"
|
|
"github.com/Warky-Devs/ResolveSpec/pkg/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func handleUpdateResult(w http.ResponseWriter, h *APIHandler, result *gorm.DB, data interface{}) {
|
|
if result.Error != nil {
|
|
logger.Error("Update error: %v", result.Error)
|
|
h.sendError(w, http.StatusInternalServerError, "update_error", "Error updating record(s)", result.Error)
|
|
return
|
|
}
|
|
if result.RowsAffected == 0 {
|
|
logger.Warn("No records found to update")
|
|
h.sendError(w, http.StatusNotFound, "not_found", "No records found to update", nil)
|
|
return
|
|
}
|
|
logger.Info("Successfully updated %d records", result.RowsAffected)
|
|
h.sendResponse(w, data, nil)
|
|
}
|
|
|
|
func optionalInt(ptr *int) int {
|
|
if ptr == nil {
|
|
return 0
|
|
}
|
|
return *ptr
|
|
}
|
|
|
|
// Helper methods
|
|
func (h *APIHandler) applyFilter(query *gorm.DB, filter FilterOption) *gorm.DB {
|
|
switch filter.Operator {
|
|
case "eq":
|
|
return query.Where(fmt.Sprintf("%s = ?", filter.Column), filter.Value)
|
|
case "neq":
|
|
return query.Where(fmt.Sprintf("%s != ?", filter.Column), filter.Value)
|
|
case "gt":
|
|
return query.Where(fmt.Sprintf("%s > ?", filter.Column), filter.Value)
|
|
case "gte":
|
|
return query.Where(fmt.Sprintf("%s >= ?", filter.Column), filter.Value)
|
|
case "lt":
|
|
return query.Where(fmt.Sprintf("%s < ?", filter.Column), filter.Value)
|
|
case "lte":
|
|
return query.Where(fmt.Sprintf("%s <= ?", filter.Column), filter.Value)
|
|
case "like":
|
|
return query.Where(fmt.Sprintf("%s LIKE ?", filter.Column), filter.Value)
|
|
case "ilike":
|
|
return query.Where(fmt.Sprintf("%s ILIKE ?", filter.Column), filter.Value)
|
|
case "in":
|
|
return query.Where(fmt.Sprintf("%s IN (?)", filter.Column), filter.Value)
|
|
default:
|
|
return query
|
|
}
|
|
}
|
|
|
|
func (h *APIHandler) getModelForEntity(schema, name string) (interface{}, error) {
|
|
model, err := models.GetModelByName(fmt.Sprintf("%s.%s", schema, name))
|
|
|
|
if err != nil {
|
|
model, err = models.GetModelByName(name)
|
|
}
|
|
return model, err
|
|
}
|