diff options
author | Mo Tarbin <mhed.t91@gmail.com> | 2024-06-30 21:41:41 -0400 |
---|---|---|
committer | Mo Tarbin <mhed.t91@gmail.com> | 2024-06-30 21:41:41 -0400 |
commit | c13dd9addbf89f716e4ef5cfdf1d673139ffcb68 (patch) | |
tree | bc09646ce1d6d3a402abb4694e19da51b57204f6 /external | |
download | donetick-c13dd9addbf89f716e4ef5cfdf1d673139ffcb68.tar.gz donetick-c13dd9addbf89f716e4ef5cfdf1d673139ffcb68.tar.bz2 donetick-c13dd9addbf89f716e4ef5cfdf1d673139ffcb68.zip |
Move to Donetick Org, first commit
Diffstat (limited to 'external')
-rw-r--r-- | external/user/model/model.go | 14 | ||||
-rw-r--r-- | external/user/repo/repository.go | 49 |
2 files changed, 63 insertions, 0 deletions
diff --git a/external/user/model/model.go b/external/user/model/model.go new file mode 100644 index 0000000..d132e68 --- /dev/null +++ b/external/user/model/model.go @@ -0,0 +1,14 @@ +package model + +import ( + "time" + + uModel "donetick.com/core/internal/user/model" +) + +type UserExtended struct { + uModel.User + Credit int `gorm:"column:amount;->"` + SubscriptionStatus *string `gorm:"column:status;<-:false"` // read one column + ExpiredAt *time.Time `gorm:"column:expired_at;<-:false"` // read one column +} diff --git a/external/user/repo/repository.go b/external/user/repo/repository.go new file mode 100644 index 0000000..6876984 --- /dev/null +++ b/external/user/repo/repository.go @@ -0,0 +1,49 @@ +package user + +import ( + "context" + + exUser "donetick.com/core/external/user/model" + "donetick.com/core/logging" + "gorm.io/gorm" +) + +type ExtendedUserRepository struct { + db *gorm.DB +} + +func NewExtendedUserRepository(db *gorm.DB) *ExtendedUserRepository { + return &ExtendedUserRepository{db} +} + +func (a *ExtendedUserRepository) FindFullUserByEmail(ctx context.Context, email string) (*exUser.UserExtended, error) { + logger := logging.FromContext(ctx) + logger.Debugw("repository.user.FindFullUserByEmail", "email", email) + var acc exUser.UserExtended + if err := a.db.Table("users"). + Select("users.*, s.expired_at, s.status , s.customer_id"). + Joins("LEFT JOIN stripe_customers sc ON sc.user_id = users.id"). + Joins("LEFT JOIN stripe_subscriptions s ON s.customer_id = sc.customer_id AND s.expired_at > now() OR s.expired_at is null"). + Where("email = ?", email). + First(&acc).Error; err != nil { + logger.Error("repository.user.FindFullUserByEmail failed to find", "err", err) + return nil, err + } + return &acc, nil +} + +func (a *ExtendedUserRepository) FindFullUserByUsername(ctx context.Context, username string) (*exUser.UserExtended, error) { + logger := logging.FromContext(ctx) + logger.Debugw("repository.user.FindFullUserByUsername", "username", username) + var acc exUser.UserExtended + if err := a.db.Table("users"). + Select("users.*, s.expired_at, s.status , s.customer_id"). + Joins("LEFT JOIN stripe_customers sc ON sc.user_id = users.id"). + Joins("LEFT JOIN stripe_subscriptions s ON s.customer_id = sc.customer_id AND s.expired_at > now() OR s.expired_at is null"). + Where("username = ?", username). + First(&acc).Error; err != nil { + logger.Error("repository.user.FindFullUserByUsername failed to find", "err", err) + return nil, err + } + return &acc, nil +} |