init
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/constants"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type User struct {
|
||||
ID uuid.UUID
|
||||
OrganizationID uuid.UUID
|
||||
OutletID *uuid.UUID
|
||||
Name string
|
||||
Email string
|
||||
Role constants.UserRole
|
||||
Permissions map[string]interface{}
|
||||
IsActive bool
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type CreateUserRequest struct {
|
||||
OrganizationID uuid.UUID `validate:"required"`
|
||||
OutletID *uuid.UUID
|
||||
Name string `validate:"required,min=1,max=255"`
|
||||
Email string `validate:"required,email"`
|
||||
Password string `validate:"required,min=6"`
|
||||
Role constants.UserRole `validate:"required"`
|
||||
Permissions map[string]interface{} `validate:"omitempty"`
|
||||
}
|
||||
|
||||
type UpdateUserRequest struct {
|
||||
Name *string `validate:"omitempty,min=1,max=255"`
|
||||
Email *string `validate:"omitempty,email"`
|
||||
Role *constants.UserRole
|
||||
OutletID *uuid.UUID
|
||||
IsActive *bool
|
||||
Permissions *map[string]interface{}
|
||||
}
|
||||
|
||||
type ChangePasswordRequest struct {
|
||||
CurrentPassword string `validate:"required"`
|
||||
NewPassword string `validate:"required,min=6"`
|
||||
}
|
||||
|
||||
type UserResponse struct {
|
||||
ID uuid.UUID
|
||||
OrganizationID uuid.UUID
|
||||
OutletID *uuid.UUID
|
||||
Name string
|
||||
Email string
|
||||
Role constants.UserRole
|
||||
Permissions map[string]interface{}
|
||||
IsActive bool
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
func (u *User) HasPermission(requiredRole constants.UserRole) bool {
|
||||
roleHierarchy := map[constants.UserRole]int{
|
||||
constants.RoleWaiter: 1,
|
||||
constants.RoleCashier: 2,
|
||||
constants.RoleManager: 3,
|
||||
constants.RoleAdmin: 4,
|
||||
}
|
||||
|
||||
userLevel := roleHierarchy[u.Role]
|
||||
requiredLevel := roleHierarchy[requiredRole]
|
||||
|
||||
return userLevel >= requiredLevel
|
||||
}
|
||||
|
||||
func (u *User) CanAccessOutlet(outletID uuid.UUID) bool {
|
||||
if u.Role == constants.RoleAdmin {
|
||||
return true
|
||||
}
|
||||
|
||||
return u.OutletID != nil && *u.OutletID == outletID
|
||||
}
|
||||
|
||||
func (u *User) IsManager() bool {
|
||||
return u.HasPermission(constants.RoleManager)
|
||||
}
|
||||
|
||||
func (u *User) IsAdmin() bool {
|
||||
return u.Role == constants.RoleAdmin
|
||||
}
|
||||
Reference in New Issue
Block a user