UserService.go
func (service UserService) Create(model *models.User) (*models.User, error) {
db, err := database.GetConnection()
if err != nil {
return nil, err
}
tx := db.Begin()
if tx.Error != nil {
fmt.Errorf("%v", err)
return nil, err
}
if err := tx.Create(model).Error; err != nil {
fmt.Errorf("%v", err)
tx.Rollback()
return nil, err
}
if err := tx.Save(model).Error; err != nil {
fmt.Errorf("%v", err)
tx.Rollback()
return nil, err
}
if err := service.UserProfileService.Create(tx, model); err != nil {
fmt.Errorf("%v", err)
tx.Rollback()
return nil, err
}
if err := tx.Commit().Error; err != nil {
fmt.Errorf("%v", err)
return nil, err
}
return model, nil
}
UserProfileService.go
func (UserProfileService) Create(tx *gorm.DB, user *models.User) error {
if err := tx.Create(models.UserProfile{User: user}).Error; err != nil {
return err
}
return nil
}
User.go
type User struct {
Id *uuid.UUID `json:"id" gorm:"not null;primary_key;type:uuid;default:uuid_generate_v4();"`
Name *string `json:"name" gorm:"not null;type:varchar(255);"`
CreatedAt time.Time `json:"createdAt" gorm:"type:timestamp;default:now()"`
UpdatedAt time.Time `json:"updatedAt" gorm:"type:timestamp;default:now()"`
DeletedAt *time.Time `json:"deleteAt,omitempty" gorm:"type:timestamp;"`
}
func (User) TableName() string {
return "users"
}
UserProfile.go
type UserProfile struct {
User *User `json:"id" gorm:"not null;primary_key;foreignkey:Id;type:uuid;default:uuid_generate_v4();"`
Id *uuid.UUID `json:"id" gorm:"not null;type:uuid"`
Description string `json:"description" gorm:"not null;type:varchar(255)"`
UpdatedAt time.Time `json:"updatedAt" gorm:"type:timestamp;default:now()"`
}
func (UserProfile) TableName() string {
return "users_profile"
}
So, every User must have just one UserProfile, that is why UserProfile's primary key is also a foreign key (User (id)). But when I try to make a request, I got this error: (using unaddressable value)
Any ideas on how to get this working?
The model that you are inserting in UserProfileService.go is not a pointer, which is why you are getting the unaddressable
error.
func (UserProfileService) Create(tx *gorm.DB, user *models.User) error {
if err := tx.Create(*models.UserProfile{User: user}).Error; err != nil {
return err
}
return nil
}
That referencing in the tx.Create
call will most likely fix your error. If not please post the full error.