package services import ( "fmt" "git.solsynth.dev/hypernet/interactive/pkg/internal/database" "git.solsynth.dev/hypernet/interactive/pkg/internal/models" authm "git.solsynth.dev/hypernet/passport/pkg/authkit/models" ) func GetPublisher(id uint, userID uint) (models.Publisher, error) { var publisher models.Publisher if err := database.C.Where("id = ? AND account_id = ?", id, userID).First(&publisher).Error; err != nil { return publisher, fmt.Errorf("unable to get publisher: %v", err) } return publisher, nil } func GetPublisherByName(name string, userID uint) (models.Publisher, error) { var publisher models.Publisher if err := database.C.Where("name = ? AND account_id = ?", name, userID).First(&publisher).Error; err != nil { return publisher, fmt.Errorf("unable to get publisher: %v", err) } return publisher, nil } func CreatePersonalPublisher(user authm.Account, name, nick, desc, avatar, banner string) (models.Publisher, error) { publisher := models.Publisher{ Type: models.PublisherTypePersonal, Name: name, Nick: nick, Description: desc, Avatar: avatar, Banner: banner, AccountID: &user.ID, } if user.Avatar != nil && len(publisher.Avatar) == 0 { publisher.Avatar = *user.Avatar } if user.Banner != nil && len(publisher.Banner) == 0 { publisher.Banner = *user.Banner } if err := database.C.Create(&publisher).Error; err != nil { return publisher, err } return publisher, nil } func CreateOrganizationPublisher(user authm.Account, realm authm.Realm, name, nick, desc, avatar, banner string) (models.Publisher, error) { publisher := models.Publisher{ Type: models.PublisherTypeOrganization, Name: name, Nick: nick, Description: desc, Avatar: avatar, Banner: banner, RealmID: &realm.ID, AccountID: &user.ID, } if realm.Avatar != nil && len(publisher.Avatar) == 0 { publisher.Avatar = *realm.Avatar } if realm.Banner != nil && len(publisher.Banner) == 0 { publisher.Banner = *realm.Banner } if err := database.C.Create(&publisher).Error; err != nil { return publisher, err } return publisher, nil } func EditPublisher(user authm.Account, publisher models.Publisher) (models.Publisher, error) { if publisher.Type == models.PublisherTypePersonal { if *publisher.AccountID != user.ID { return publisher, fmt.Errorf("you cannot transfer personal publisher") } } err := database.C.Save(&publisher).Error return publisher, err } func DeletePublisher(publisher models.Publisher) error { return database.C.Delete(&publisher).Error }