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