monorepo/cloud/maplefile-backend/pkg/maplefile/client/user.go

84 lines
2.7 KiB
Go

// Package client provides a Go SDK for interacting with the MapleFile API.
package client
import (
"context"
"fmt"
"net/url"
)
// GetMe returns the current authenticated user's profile.
func (c *Client) GetMe(ctx context.Context) (*User, error) {
var resp User
if err := c.doRequest(ctx, "GET", "/api/v1/me", nil, &resp, true); err != nil {
return nil, err
}
return &resp, nil
}
// UpdateMe updates the current user's profile.
func (c *Client) UpdateMe(ctx context.Context, input *UpdateUserInput) (*User, error) {
var resp User
if err := c.doRequest(ctx, "PUT", "/api/v1/me", input, &resp, true); err != nil {
return nil, err
}
return &resp, nil
}
// DeleteMe deletes the current user's account.
func (c *Client) DeleteMe(ctx context.Context, password string) error {
input := DeleteUserInput{Password: password}
return c.doRequest(ctx, "DELETE", "/api/v1/me", input, nil, true)
}
// PublicUserLookup looks up a user by email (returns public info only).
// This endpoint does not require authentication.
func (c *Client) PublicUserLookup(ctx context.Context, email string) (*PublicUser, error) {
path := fmt.Sprintf("/iam/api/v1/users/lookup?email=%s", url.QueryEscape(email))
var resp PublicUser
if err := c.doRequest(ctx, "GET", path, nil, &resp, false); err != nil {
return nil, err
}
return &resp, nil
}
// CreateBlockedEmail adds an email to the blocked list.
func (c *Client) CreateBlockedEmail(ctx context.Context, email, reason string) (*BlockedEmail, error) {
input := CreateBlockedEmailInput{
Email: email,
Reason: reason,
}
var resp BlockedEmail
if err := c.doRequest(ctx, "POST", "/api/v1/me/blocked-emails", input, &resp, true); err != nil {
return nil, err
}
return &resp, nil
}
// ListBlockedEmails returns all blocked emails for the current user.
func (c *Client) ListBlockedEmails(ctx context.Context) (*ListBlockedEmailsResponse, error) {
var resp ListBlockedEmailsResponse
if err := c.doRequest(ctx, "GET", "/api/v1/me/blocked-emails", nil, &resp, true); err != nil {
return nil, err
}
return &resp, nil
}
// DeleteBlockedEmail removes an email from the blocked list.
func (c *Client) DeleteBlockedEmail(ctx context.Context, email string) (*DeleteBlockedEmailResponse, error) {
path := fmt.Sprintf("/api/v1/me/blocked-emails/%s", url.PathEscape(email))
var resp DeleteBlockedEmailResponse
if err := c.doRequest(ctx, "DELETE", path, nil, &resp, true); err != nil {
return nil, err
}
return &resp, nil
}
// GetDashboard returns the user's dashboard data.
func (c *Client) GetDashboard(ctx context.Context) (*DashboardResponse, error) {
var resp DashboardResponse
if err := c.doRequest(ctx, "GET", "/api/v1/dashboard", nil, &resp, true); err != nil {
return nil, err
}
return &resp, nil
}