cpularp-manager-api/src/lib/database/function/function.go

153 lines
3.8 KiB
Go
Raw Normal View History

package function
import (
"encoding/json"
"io"
"log"
"strconv"
functiontag "example.com/database/functiontag"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type Function struct {
gorm.Model
Name string `gorm:"uniqueIndex" json:"name"`
Tags []functiontag.FunctionTag `gorm:"many2many:function_tag_associations" json:"tags"`
Requirements []Function `gorm:"many2many:function_requirement_associations" json:"requirements"`
}
type functionParams struct {
2025-05-12 11:24:57 -05:00
Id string `json:"id"`
Name string `json:"name"`
Tags []uint `json:"tags"`
Requirements []uint `json:"requirements"`
}
2025-04-29 00:42:57 -05:00
func (function Function) Create(db *gorm.DB) error {
result := db.Create(&function)
if result.Error != nil {
return result.Error
}
return nil
}
func (function *Function) getAssociations(db *gorm.DB) {
db.Model(&function).Association("Tags").Find(&function.Tags)
db.Model(&function).Association("Requirements").Find(&function.Requirements)
}
func (params *functionParams) validate(context *gin.Context) error {
body, err := io.ReadAll(context.Request.Body)
if err != nil {
log.Println(err)
return err
}
log.Println(string(body))
var newParams functionParams
err = json.Unmarshal(body, &newParams)
log.Println(err, newParams)
params.Id = newParams.Id
params.Name = newParams.Name
params.Tags = newParams.Tags
params.Requirements = newParams.Requirements
return nil
}
func (function *Function) Get(db *gorm.DB, inputFunction uint) {
db.Where("id = ?", inputFunction).Take(&function)
function.getAssociations(db)
}
func (function Function) update(db *gorm.DB) error {
var originalFunction Function
result := db.Model(&Function{}).Where("id = ?", function.Model.ID).Take(&originalFunction)
if result.Error != nil {
return result.Error
}
originalFunction.Name = function.Name
tagsError := db.Model(&originalFunction).Association("Tags").Replace(&function.Tags)
if tagsError != nil {
return tagsError
}
requirementsError := db.Model(&originalFunction).Association("Requirements").Replace(&function.Requirements)
if requirementsError != nil {
return requirementsError
}
db.Save(&originalFunction)
return nil
}
func (function Function) Delete(db *gorm.DB) error {
result := db.Delete(&function)
if result.Error != nil {
return result.Error
}
return nil
}
func Create(db *gorm.DB, context *gin.Context) error {
var params functionParams
err := params.validate(context)
if err != nil {
return err
}
2025-04-29 00:42:57 -05:00
return Function{
Name: params.Name,
Tags: *functiontag.Get(db, params.Tags),
Requirements: *Get(db, params.Requirements),
2025-04-29 00:42:57 -05:00
}.Create(db)
}
func Get(db *gorm.DB, inputFunctions []uint) *[]Function {
var outputFunctions []Function
for _, inputFunction := range inputFunctions {
var outputFunction Function
outputFunction.Get(db, inputFunction)
outputFunctions = append(outputFunctions, outputFunction)
}
log.Println(outputFunctions)
return &outputFunctions
}
func GetAll(db *gorm.DB) *[]Function {
var outputFunctionNames []uint
result := db.Model(&Function{}).Select("id").Find(&outputFunctionNames)
if result.Error != nil {
log.Println(result.Error)
}
2025-04-29 00:42:57 -05:00
return Get(db, outputFunctionNames)
}
func Update(db *gorm.DB, context *gin.Context) error {
var params functionParams
err := params.validate(context)
if err != nil {
return err
}
uintID, err := strconv.Atoi(params.Id)
if err != nil {
return err
}
2025-04-29 00:42:57 -05:00
return Function{
Model: gorm.Model{ID: uint(uintID)},
Name: params.Name,
Tags: *functiontag.Get(db, params.Tags),
Requirements: *Get(db, params.Requirements),
}.update(db)
}
func Delete(db *gorm.DB, inputFunctions []uint) error {
functions := Get(db, inputFunctions)
log.Println(inputFunctions, functions)
for _, function := range *functions {
err := function.Delete(db)
if err != nil {
return err
}
}
return nil
}