Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 4066

ERROR: insert or update on table "promos" violates foreign key constraint "fk_businesses_promos"

$
0
0

I'm trying to bulid a REST API using go and specifically GORM.

My entities look like this:

type Business struct {    ID        string    `json:"id" gorm:"primaryKey;not null;type:uuid;default:gen_random_uuid()"`    CreatedAt time.Time `json:"-"`    UpdatedAt time.Time `json:"-"`    Email    string `json:"email" gorm:"uniqueIndex;not null;"`    Password []byte `json:"-"`    Name     string `json:"name"`    Promos []Promo `json:"promos" gorm:"foreignKey:CompanyID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`}
type Promo struct {    PromoID   string    `json:"id" gorm:"primaryKey;not null;type:uuid;default:gen_random_uuid()"`    CompanyID string    `json:"company_id" gorm:"not null;foreignKey:ID"`    CreatedAt time.Time `json:"-"`    UpdatedAt time.Time `json:"-"`    Target      Target        `json:"target" gorm:"foreignKey:TargetID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;not null"`    Active      bool          `json:"-" gorm:"default:true"`    ActiveFrom  time.Time     `json:"active_from"`    ActiveUntil time.Time     `json:"active_until"`    Description string        `json:"description" gorm:"not null"`    ImageURL    string        `json:"image_url"`    MaxCount    int           `json:"max_count" gorm:"not null"`    Mode        string        `json:"mode" gorm:"not null"`    PromoCommon string        `json:"promo_common"`    PromoUnique []PromoUnique `json:"promo_unique" gorm:"foreignKey:PromoUniqueID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`}type PromoUnique struct {    PromoUniqueID string `json:"-" gorm:"primaryKey;not null;type:uuid;default:gen_random_uuid()"`    Body          string `json:"-" gorm:"not null"`    Activated     bool   `json:"-" gorm:"default:false"`}type Target struct {    TargetID   string                `json:"-" gorm:"primaryKey;not null;type:uuid;default:gen_random_uuid()"`    AgeFrom    int                   `json:"age_from"`    AgeUntil   int                   `json:"age_until"`    Country    countries.CountryCode `json:"country"`    Categories []Category            `json:"categories" gorm:"foreignKey:CategoryID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`}type Category struct {    CategoryID string `json:"id" gorm:"primaryKey;not null;type:uuid;default:gen_random_uuid()"`    TargetID   string `json:"-" gorm:"not null"`    Name       string `json:"name" gorm:"not null"`}

My service's code looks like this:

func (s *promoService) Create(ctx context.Context, promoDTO dto.PromoCreate) (*entity.Promo, error) {    activeFrom, _ := time.Parse("2006-01-02", promoDTO.ActiveFrom)    activeUntil, _ := time.Parse("2006-01-02", promoDTO.ActiveUntil)    var categories []entity.Category    var promoUniques []entity.PromoUnique    for _, category := range promoDTO.Target.Categories {        categories = append(categories, entity.Category{            Name: category,        })    }    for _, promoUnique := range promoDTO.PromoUnique {        promoUniques = append(promoUniques, entity.PromoUnique{            Body: promoUnique,        })    }    company, _ := s.businessStorage.GetByID(ctx, promoDTO.CompanyID)    promo := entity.Promo{        Target: entity.Target{            AgeFrom:    promoDTO.Target.AgeFrom,            AgeUntil:   promoDTO.Target.AgeUntil,            Country:    countries.ByName(strings.ToUpper(promoDTO.Target.Country)),            Categories: categories,        },        CompanyID:   company.ID,        Active:      true,        ActiveFrom:  activeFrom,        ActiveUntil: activeUntil,        Description: promoDTO.Description,        ImageURL:    promoDTO.ImageURL,        MaxCount:    promoDTO.MaxCount,        Mode:        promoDTO.Mode,        PromoCommon: promoDTO.PromoCommon,        PromoUnique: promoUniques,    }    company.Promos = append(company.Promos, promo)    _, err := s.businessStorage.Update(ctx, company)    if err != nil {        return nil, err    }    return s.promoStorage.Create(ctx, promo)}

My storage looks like this:

// Create is a method to create a new Promo in database.func (s *promoStorage) Create(ctx context.Context, promo entity.Promo) (*entity.Promo, error) {    err := s.db.Model(&promo).WithContext(ctx).Create(&promo).Error    return &promo, err}

But when I try to reach an endpoint I get this error:

/opt/internal/adapters/database/postgres/promo.go:22 ERROR: insert or update on table "promos" violates foreign key constraint "fk_businesses_promos" (SQLSTATE 23503)       

What should I do? I've researched some other questions on stackoverflow with the same issue, but none helped me.


Viewing all articles
Browse latest Browse all 4066

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>