Add License Integration
This commit is contained in:
parent
5e26402c10
commit
c1ae2fd14a
@ -83,18 +83,19 @@ func (UserDB) TableName() string {
|
||||
return "users"
|
||||
}
|
||||
|
||||
func (u *UserDB) ToUserAuthenticate(signedToken string) *AuthenticateUser {
|
||||
func (u *UserDB) ToUserAuthenticate(signedToken string, license PartnerLicense) *AuthenticateUser {
|
||||
return &AuthenticateUser{
|
||||
Token: signedToken,
|
||||
Name: u.Name,
|
||||
RoleID: role.Role(u.RoleID),
|
||||
RoleName: u.RoleName,
|
||||
PartnerID: u.PartnerID,
|
||||
PartnerName: u.PartnerName,
|
||||
PartnerStatus: u.PartnerStatus,
|
||||
SiteID: u.SiteID,
|
||||
SiteName: u.SiteName,
|
||||
ResetPassword: u.ResetPassword,
|
||||
Token: signedToken,
|
||||
Name: u.Name,
|
||||
RoleID: role.Role(u.RoleID),
|
||||
RoleName: u.RoleName,
|
||||
PartnerID: u.PartnerID,
|
||||
PartnerName: u.PartnerName,
|
||||
PartnerStatus: u.PartnerStatus,
|
||||
SiteID: u.SiteID,
|
||||
SiteName: u.SiteName,
|
||||
ResetPassword: u.ResetPassword,
|
||||
PartnerLicense: license,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -93,3 +93,29 @@ func (o *LicenseDB) ToUpdatedLicense(updatedBy int64, req License) {
|
||||
o.SerialNumber = req.SerialNumber
|
||||
}
|
||||
}
|
||||
|
||||
type PartnerLicense struct {
|
||||
PartnerID int64 `json:"partner_id"`
|
||||
LicenseStatus string `json:"license_status"`
|
||||
DaysToExpire int64 `json:"days_to_expire"`
|
||||
}
|
||||
|
||||
func (l *LicenseDB) ToPartnerLicense() PartnerLicense {
|
||||
now := time.Now()
|
||||
daysToExpire := int64(l.EndDate.Sub(now).Hours() / 24)
|
||||
|
||||
var licenseStatus string
|
||||
if daysToExpire < 0 {
|
||||
licenseStatus = "EXPIRED"
|
||||
} else if daysToExpire <= 30 {
|
||||
licenseStatus = "EXPIRING_SOON"
|
||||
} else {
|
||||
licenseStatus = "ACTIVE"
|
||||
}
|
||||
|
||||
return PartnerLicense{
|
||||
PartnerID: l.PartnerID,
|
||||
DaysToExpire: daysToExpire,
|
||||
LicenseStatus: licenseStatus,
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,16 +29,17 @@ type User struct {
|
||||
}
|
||||
|
||||
type AuthenticateUser struct {
|
||||
Token string
|
||||
Name string
|
||||
RoleID role.Role
|
||||
RoleName string
|
||||
PartnerID *int64
|
||||
PartnerName string
|
||||
PartnerStatus string
|
||||
SiteID *int64
|
||||
SiteName string
|
||||
ResetPassword bool
|
||||
Token string
|
||||
Name string
|
||||
RoleID role.Role
|
||||
RoleName string
|
||||
PartnerID *int64
|
||||
PartnerName string
|
||||
PartnerStatus string
|
||||
SiteID *int64
|
||||
SiteName string
|
||||
ResetPassword bool
|
||||
PartnerLicense PartnerLicense
|
||||
}
|
||||
|
||||
type UserRoleDB struct {
|
||||
|
||||
@ -82,6 +82,10 @@ func (h *AuthHandler) AuthLogin(c *gin.Context) {
|
||||
},
|
||||
Site: site,
|
||||
ResetPassword: authUser.ResetPassword,
|
||||
PartnerLicense: &response.PartnerLicense{
|
||||
DaysToExpire: authUser.PartnerLicense.DaysToExpire,
|
||||
Status: authUser.PartnerLicense.LicenseStatus,
|
||||
},
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, response.BaseResponse{
|
||||
|
||||
@ -1,15 +1,21 @@
|
||||
package response
|
||||
|
||||
type LoginResponse struct {
|
||||
Token string `json:"token"`
|
||||
Name string `json:"name"`
|
||||
Role Role `json:"role"`
|
||||
Partner *Partner `json:"partner"`
|
||||
Site *SiteName `json:"site,omitempty"`
|
||||
ResetPassword bool `json:"reset_password"`
|
||||
Token string `json:"token"`
|
||||
Name string `json:"name"`
|
||||
Role Role `json:"role"`
|
||||
Partner *Partner `json:"partner"`
|
||||
Site *SiteName `json:"site,omitempty"`
|
||||
ResetPassword bool `json:"reset_password"`
|
||||
PartnerLicense *PartnerLicense `json:"partner_license,omitempty"`
|
||||
}
|
||||
|
||||
type Role struct {
|
||||
ID int64 `json:"id"`
|
||||
Role string `json:"role_name"`
|
||||
}
|
||||
|
||||
type PartnerLicense struct {
|
||||
DaysToExpire int64 `json:"days_to_expire,omitempty"`
|
||||
Status string `json:"status,omitempty"`
|
||||
}
|
||||
|
||||
@ -84,3 +84,14 @@ func (r *LicenseRepository) GetAll(ctx context.Context, limit, offset int, statu
|
||||
|
||||
return licenses, total, nil
|
||||
}
|
||||
|
||||
func (r *LicenseRepository) FindByPartnerIDMaxEndDate(ctx context.Context, partnerID *int64) (*entity.LicenseDB, error) {
|
||||
var licenseDB entity.LicenseDB
|
||||
if err := r.db.WithContext(ctx).
|
||||
Where("partner_id = ?", partnerID).
|
||||
Order("end_date DESC").
|
||||
First(&licenseDB).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &licenseDB, nil
|
||||
}
|
||||
|
||||
@ -205,6 +205,7 @@ type License interface {
|
||||
Update(ctx context.Context, license *entity.LicenseDB) (*entity.LicenseDB, error)
|
||||
FindByID(ctx context.Context, id string) (*entity.LicenseDB, error)
|
||||
GetAll(ctx context.Context, limit, offset int, statusFilter string) ([]*entity.LicenseGetAll, int64, error)
|
||||
FindByPartnerIDMaxEndDate(ctx context.Context, partnerID *int64) (*entity.LicenseDB, error)
|
||||
}
|
||||
|
||||
type TransactionRepository interface {
|
||||
|
||||
@ -21,11 +21,13 @@ type AuthServiceImpl struct {
|
||||
emailSvc repository.EmailService
|
||||
emailCfg config.Email
|
||||
trxRepo repository.TransactionManager
|
||||
license repository.License
|
||||
}
|
||||
|
||||
func New(authRepo repository.Auth,
|
||||
crypto repository.Crypto, user repository.User, emailSvc repository.EmailService,
|
||||
emailCfg config.Email, trxRepo repository.TransactionManager,
|
||||
license repository.License,
|
||||
) *AuthServiceImpl {
|
||||
return &AuthServiceImpl{
|
||||
authRepo: authRepo,
|
||||
@ -34,6 +36,7 @@ func New(authRepo repository.Auth,
|
||||
emailSvc: emailSvc,
|
||||
emailCfg: emailCfg,
|
||||
trxRepo: trxRepo,
|
||||
license: license,
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,8 +60,18 @@ func (u *AuthServiceImpl) AuthenticateUser(ctx context.Context, email, password
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var licensePartner entity.PartnerLicense
|
||||
|
||||
return user.ToUserAuthenticate(signedToken), nil
|
||||
if user.PartnerID != nil {
|
||||
parterLicense, err := u.license.FindByPartnerIDMaxEndDate(ctx, user.PartnerID)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when get user license", zap.Error(err))
|
||||
return nil, errors.ErrorInternalServer
|
||||
}
|
||||
licensePartner = parterLicense.ToPartnerLicense()
|
||||
}
|
||||
|
||||
return user.ToUserAuthenticate(signedToken, licensePartner), nil
|
||||
}
|
||||
|
||||
func (u *AuthServiceImpl) SendPasswordResetLink(ctx context.Context, email string) error {
|
||||
|
||||
@ -42,7 +42,7 @@ type ServiceManagerImpl struct {
|
||||
|
||||
func NewServiceManagerImpl(cfg *config.Config, repo *repository.RepoManagerImpl) *ServiceManagerImpl {
|
||||
return &ServiceManagerImpl{
|
||||
AuthSvc: auth.New(repo.Auth, repo.Crypto, repo.User, repo.EmailService, cfg.Email, repo.Trx),
|
||||
AuthSvc: auth.New(repo.Auth, repo.Crypto, repo.User, repo.EmailService, cfg.Email, repo.Trx, repo.License),
|
||||
EventSvc: event.NewEventService(repo.Event),
|
||||
UserSvc: users.NewUserService(repo.User, repo.Branch),
|
||||
BranchSvc: branch.NewBranchService(repo.Branch),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user