93 lines
2.2 KiB
Go
Raw Normal View History

2025-07-18 20:10:29 +07:00
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"`
}
2025-07-30 23:18:20 +07:00
type UpdateUserOutletRequest struct {
OutletID uuid.UUID `validate:"required"`
}
2025-07-18 20:10:29 +07:00
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
}