package contract import ( "time" "github.com/google/uuid" ) type CreateUserRequest struct { OrganizationID uuid.UUID `json:"organization_id" validate:"required"` OutletID *uuid.UUID `json:"outlet_id,omitempty"` Name string `json:"name" validate:"required,min=1,max=255"` Email string `json:"email" validate:"required,email"` Password string `json:"password" validate:"required,min=6"` Role string `json:"role" validate:"required,oneof=admin manager cashier waiter"` Permissions map[string]interface{} `json:"permissions,omitempty"` } type UpdateUserRequest struct { Name *string `json:"name,omitempty" validate:"omitempty,min=1,max=255"` Email *string `json:"email,omitempty" validate:"omitempty,email"` Role *string `json:"role,omitempty" validate:"omitempty,oneof=admin manager cashier waiter"` OutletID *uuid.UUID `json:"outlet_id,omitempty"` IsActive *bool `json:"is_active,omitempty"` Permissions *map[string]interface{} `json:"permissions,omitempty"` } type ChangePasswordRequest struct { CurrentPassword string `json:"current_password" validate:"required"` NewPassword string `json:"new_password" validate:"required,min=6"` } type LoginRequest struct { Email string `json:"email" validate:"required,email"` Password string `json:"password" validate:"required"` } type LoginResponse struct { Token string `json:"token"` ExpiresAt time.Time `json:"expires_at"` User UserResponse `json:"user"` } type UserResponse struct { ID uuid.UUID `json:"id"` OrganizationID uuid.UUID `json:"organization_id"` OutletID *uuid.UUID `json:"outlet_id"` Name string `json:"name"` Email string `json:"email"` Role string `json:"role"` Permissions map[string]interface{} `json:"permissions"` IsActive bool `json:"is_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ListUsersRequest struct { Page int `json:"page" validate:"min=1"` Limit int `json:"limit" validate:"min=1,max=100"` Role *string `json:"role,omitempty"` OutletID *uuid.UUID `json:"outlet_id,omitempty"` IsActive *bool `json:"is_active,omitempty"` OrganizationID *uuid.UUID `json:"organization_id,omitempty"` } type ListUsersResponse struct { Users []UserResponse `json:"users"` Pagination PaginationResponse `json:"pagination"` }