123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package cosy
- import (
- "github.com/0xJacky/Nginx-UI/internal/cosy/map2struct"
- "github.com/0xJacky/Nginx-UI/model"
- "github.com/gin-gonic/gin"
- "gorm.io/gorm/clause"
- "net/http"
- )
- func (c *Ctx[T]) Create() {
- errs := c.validate()
- if len(errs) > 0 {
- c.ctx.JSON(http.StatusNotAcceptable, gin.H{
- "message": "Requested with wrong parameters",
- "errors": errs,
- })
- return
- }
- db := model.UseDB()
- c.beforeDecodeHook()
- if c.abort {
- return
- }
- err := map2struct.WeakDecode(c.Payload, &c.Model)
- if err != nil {
- errHandler(c.ctx, err)
- return
- }
- c.beforeExecuteHook()
- if c.abort {
- return
- }
- if c.skipAssociationsOnCreate {
- err = db.Omit(clause.Associations).Create(&c.Model).Error
- } else {
- err = db.Create(&c.Model).Error
- }
- if err != nil {
- errHandler(c.ctx, err)
- return
- }
- if len(c.executedHookFunc) > 0 {
- for _, v := range c.executedHookFunc {
- v(c)
- if c.abort {
- return
- }
- }
- }
- tx := db.Preload(clause.Associations)
- for _, v := range c.preloads {
- tx = tx.Preload(v)
- }
- tx.Table(c.table, c.tableArgs...).First(&c.Model)
- if c.nextHandler != nil {
- (*c.nextHandler)(c.ctx)
- } else {
- c.ctx.JSON(http.StatusOK, c.Model)
- }
- }
- func (c *Ctx[T]) WithAssociations() *Ctx[T] {
- c.skipAssociationsOnCreate = false
- return c
- }
|