93 lines
2.2 KiB
Go
93 lines
2.2 KiB
Go
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 UpdateUserOutletRequest struct {
|
|
OutletID uuid.UUID `validate:"required"`
|
|
}
|
|
|
|
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
|
|
}
|