Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type AdminUserResponse ¶
type AdminUserResponse struct {
ID string `json:"id"`
Email string `json:"email"`
IsAdmin bool `json:"is_admin"`
AccountStatus core.AccountStatus `json:"account_status"`
SignupReason *string `json:"signup_reason,omitempty"`
TrialStartedAt *time.Time `json:"trial_started_at,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
func ToAdminUserResponse ¶
func ToAdminUserResponse(u *User) AdminUserResponse
type AdminUsersListResponse ¶
type AdminUsersListResponse struct {
Data []AdminUserResponse `json:"data"`
}
type DBUser ¶
type DBUser struct {
ID string `db:"id"`
Email string `db:"email"`
IsAdmin bool `db:"is_admin"`
AccountStatus core.AccountStatus `db:"account_status"`
SignupReason *string `db:"signup_reason"`
TrialStartedAt *int64 `db:"trial_started_at"`
CreatedAt int64 `db:"created_at"`
UpdatedAt int64 `db:"updated_at"`
}
DBUser represents a user record from the database.
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
func (*Handler) UpdateUserStatus ¶
func (h *Handler) UpdateUserStatus(w http.ResponseWriter, r *http.Request)
type Repository ¶
type Repository struct {
// contains filtered or unexported fields
}
Repository provides data access for the admin domain.
func NewRepository ¶
func NewRepository(db *sqlx.DB) *Repository
NewRepository creates a new admin repository.
func (*Repository) GetAllUsers ¶
func (r *Repository) GetAllUsers(ctx context.Context) ([]DBUser, error)
GetAllUsers retrieves all users ordered by creation date.
func (*Repository) GetUserByID ¶
GetUserByID retrieves a user by ID.
func (*Repository) UpdateAccountStatus ¶
func (r *Repository) UpdateAccountStatus(ctx context.Context, userID string, fromStatus core.AccountStatus, toStatus core.AccountStatus) (bool, error)
UpdateAccountStatus updates a user's account_status with optimistic locking. Returns (true, nil) if RowsAffected == 1, (false, nil) if RowsAffected == 0.
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service provides admin business logic.
func NewService ¶
func NewService(repo *Repository, sessionRevoker SessionRevoker, mailer Mailer, logger *slog.Logger) *Service
NewService creates a new admin service.
type SessionRevoker ¶
type UpdateUserStatusRequest ¶
type UpdateUserStatusRequest struct {
AccountStatus core.AccountStatus `json:"account_status"`
}
Click to show internal directories.
Click to hide internal directories.