Organize backend into product executable and shared Go modules

This commit is contained in:
Stephan D committed 2026-09-12 14:14:08 +02:00
1 parent 981e84a4b4
commit f0720ec66b
382 files changed
+1944 -6989

No files matched your search

@@ -0,0 +1,70 @@
package model
import (
"git.sendico.io/tech/sxchnge/shared/database/record"
sharedmodel "git.sendico.io/tech/sxchnge/shared/model"
"git.sendico.io/tech/sxchnge/shared/service"
"golang.org/x/crypto/bcrypt"
)
type Filter int
type AccountStatus string
const (
AccountPendingVerification AccountStatus = "pending_verification"
AccountActive AccountStatus = "active"
AccountBlocked AccountStatus = "blocked"
)
type AccountBase struct {
storable.Base `bson:",inline" json:",inline"`
sharedmodel.ArchivableBase `bson:",inline" json:",inline"`
sharedmodel.Describable `bson:",inline" json:",inline"`
LastName string `bson:"lastName" json:"lastName"`
AvatarURL *string `bson:"avatarUrl,omitempty" json:"avatarUrl,omitempty"`
}
func (*AccountBase) Collection() string {
return mservice.Accounts
}
type AccountPublic struct {
AccountBase `bson:",inline" json:",inline"`
UserDataBase `bson:",inline" json:",inline"`
}
type Account struct {
AccountPublic `bson:",inline" json:",inline"`
Password string `bson:"password" json:"-"` // password hash
Status AccountStatus `bson:"status" json:"-"`
}
func (a *Account) Copy() *Account {
if a == nil {
return nil
}
copied := *a
return &copied
}
func (a *Account) IsActive() bool {
return a.Status == AccountActive
}
func (a *Account) HashPassword() error {
key, err := bcrypt.GenerateFromPassword([]byte(a.Password), bcrypt.DefaultCost)
if err == nil {
a.Password = string(key)
}
return err
}
func (a *Account) MatchPassword(password string) bool {
err := bcrypt.CompareHashAndPassword([]byte(a.Password), []byte(password))
return err == nil
}
const AccountRefField = "accountRef"
@@ -0,0 +1,32 @@
package model
import sharedmodel "git.sendico.io/tech/sxchnge/shared/model"
type UserDataBase struct {
Login string `bson:"login" json:"login"`
Locale string `bson:"locale" json:"locale"`
}
type LoginData struct {
UserDataBase `bson:",inline" json:",inline"`
Password string ` bson:"-" json:"password"`
}
type AccountData struct {
LoginData `bson:",inline" json:",inline"`
sharedmodel.Describable `bson:",inline" json:",inline"`
LastName string `bson:"lastName" json:"lastName"`
}
func (ad *AccountData) ToAccount() *Account {
return &Account{
AccountPublic: AccountPublic{
AccountBase: AccountBase{
Describable: ad.Describable,
LastName: ad.LastName,
},
UserDataBase: ad.UserDataBase,
},
Password: ad.Password,
}
}