useSettingsApi-D7_a-esD.mjs 7.4 KB
import { z as createSharedComposable, A as useApiGateway } from './server.mjs';

const DEFAULT_PROFILE = {
  name: "",
  email: "",
  username: "",
  avatar: void 0,
  bio: void 0
};
const DEFAULT_NOTIFICATIONS = {
  email: true,
  desktop: false,
  product_updates: true,
  weekly_digest: false,
  important_updates: true
};
function isRecord(value) {
  return typeof value === "object" && value !== null;
}
function pickMessage(payload, fallback) {
  if (!isRecord(payload)) {
    return fallback;
  }
  if (typeof payload.message === "string" && payload.message.trim().length > 0) {
    return payload.message;
  }
  if (typeof payload.msg === "string" && payload.msg.trim().length > 0) {
    return payload.msg;
  }
  if (typeof payload.error === "string" && payload.error.trim().length > 0) {
    return payload.error;
  }
  return fallback;
}
function pickErrorCode(payload) {
  if (!isRecord(payload)) {
    return null;
  }
  if (typeof payload.errorCode === "string") {
    return payload.errorCode;
  }
  if (typeof payload.code === "string") {
    return payload.code;
  }
  if (typeof payload.code === "number") {
    return String(payload.code);
  }
  return null;
}
function extractData(payload) {
  if (Array.isArray(payload)) {
    return payload;
  }
  if (!isRecord(payload)) {
    return null;
  }
  if ("data" in payload) {
    return payload.data;
  }
  if ("result" in payload) {
    return payload.result;
  }
  if ("payload" in payload) {
    return payload.payload;
  }
  return payload;
}
function normalizeMutationPayload(payload, defaultMessage) {
  if (isRecord(payload) && typeof payload.success === "boolean") {
    return {
      success: payload.success,
      errorCode: pickErrorCode(payload),
      message: pickMessage(payload, defaultMessage)
    };
  }
  if (isRecord(payload) && typeof payload.code !== "undefined") {
    const code = String(payload.code);
    const success = code === "0" || code === "200";
    return {
      success,
      errorCode: success ? null : code,
      message: pickMessage(payload, defaultMessage)
    };
  }
  return {
    success: true,
    errorCode: null,
    message: defaultMessage
  };
}
function normalizeMutationError(error) {
  if (isRecord(error) && "data" in error) {
    const payload = normalizeMutationPayload(error.data, "请求失败,请稍后重试。");
    if (!payload.success) {
      return payload;
    }
  }
  return {
    success: false,
    errorCode: "REQUEST_FAILED",
    message: "请求失败,请稍后重试。"
  };
}
function normalizeProfile(payload) {
  const extracted = extractData(payload);
  if (!isRecord(extracted)) {
    return { ...DEFAULT_PROFILE };
  }
  return {
    name: typeof extracted.name === "string" ? extracted.name : DEFAULT_PROFILE.name,
    email: typeof extracted.email === "string" ? extracted.email : DEFAULT_PROFILE.email,
    username: typeof extracted.username === "string" ? extracted.username : DEFAULT_PROFILE.username,
    avatar: typeof extracted.avatar === "string" ? extracted.avatar : void 0,
    bio: typeof extracted.bio === "string" ? extracted.bio : void 0
  };
}
function normalizeNotifications(payload) {
  const extracted = extractData(payload);
  if (!isRecord(extracted)) {
    return { ...DEFAULT_NOTIFICATIONS };
  }
  return {
    email: typeof extracted.email === "boolean" ? extracted.email : DEFAULT_NOTIFICATIONS.email,
    desktop: typeof extracted.desktop === "boolean" ? extracted.desktop : DEFAULT_NOTIFICATIONS.desktop,
    product_updates: typeof extracted.product_updates === "boolean" ? extracted.product_updates : DEFAULT_NOTIFICATIONS.product_updates,
    weekly_digest: typeof extracted.weekly_digest === "boolean" ? extracted.weekly_digest : DEFAULT_NOTIFICATIONS.weekly_digest,
    important_updates: typeof extracted.important_updates === "boolean" ? extracted.important_updates : DEFAULT_NOTIFICATIONS.important_updates
  };
}
function normalizeRole(role) {
  if (role === "member" || role === "admin" || role === "customer") {
    return role;
  }
  if (role === "owner") {
    return "admin";
  }
  return "member";
}
function normalizeMembers(payload) {
  const extracted = extractData(payload);
  if (!Array.isArray(extracted)) {
    return [];
  }
  return extracted.filter(isRecord).map((member) => {
    const avatar = isRecord(member.avatar) ? member.avatar : {};
    return {
      name: typeof member.name === "string" ? member.name : "",
      email: typeof member.email === "string" ? member.email : void 0,
      username: typeof member.username === "string" ? member.username : "",
      role: normalizeRole(member.role),
      bio: typeof member.bio === "string" ? member.bio : void 0,
      avatar: {
        src: typeof avatar.src === "string" ? avatar.src : void 0,
        alt: typeof avatar.alt === "string" ? avatar.alt : void 0
      }
    };
  }).filter((member) => member.name.length > 0 && member.username.length > 0);
}
const _useSettingsApi = () => {
  const api = useApiGateway();
  async function mutate(path, method, body, successMessage = "操作成功。") {
    try {
      const result = await api.request(`/api/settings${path}`, {
        method,
        body,
        remotePath: `/settings${path}`
      });
      return normalizeMutationPayload(result, successMessage);
    } catch (error) {
      return normalizeMutationError(error);
    }
  }
  const getProfile = () => {
    return api.useApiFetch("/api/settings/profile", {
      remotePath: "/settings/profile",
      transform: normalizeProfile,
      default: () => ({ ...DEFAULT_PROFILE })
    });
  };
  const updateProfile = async (payload) => {
    const result = await mutate("/profile", "PUT", payload, "个人资料已保存。");
    if (!result.success) {
      return result;
    }
    return {
      ...result,
      profile: payload
    };
  };
  const getNotifications = () => {
    return api.useApiFetch("/api/settings/notifications", {
      remotePath: "/settings/notifications",
      transform: normalizeNotifications,
      default: () => ({ ...DEFAULT_NOTIFICATIONS })
    });
  };
  const updateNotifications = (payload) => {
    return mutate("/notifications", "PUT", payload, "通知设置已保存。");
  };
  const updatePassword = (payload) => {
    return mutate("/security/password", "POST", payload, "密码已更新。");
  };
  const deleteAccount = () => {
    return mutate("/security/account", "DELETE", void 0, "账号已删除。");
  };
  const getMembers = () => {
    return api.useApiFetch("/api/settings/members", {
      remotePath: "/settings/members",
      transform: normalizeMembers,
      default: () => []
    });
  };
  const inviteMember = (payload) => {
    return mutate("/members", "POST", payload, "成员邀请已发送。");
  };
  const updateMemberProfile = (username, payload) => {
    return mutate(`/members/${username}/profile`, "PUT", payload, "成员资料已更新。");
  };
  const updateMemberRole = (username, role) => {
    return mutate(`/members/${username}`, "PATCH", { role }, "成员角色已更新。");
  };
  const removeMember = (username) => {
    return mutate(`/members/${username}`, "DELETE", void 0, "成员已移除。");
  };
  return {
    getProfile,
    updateProfile,
    getNotifications,
    updateNotifications,
    updatePassword,
    deleteAccount,
    getMembers,
    inviteMember,
    updateMemberProfile,
    updateMemberRole,
    removeMember
  };
};
const useSettingsApi = createSharedComposable(_useSettingsApi);

export { useSettingsApi as u };
//# sourceMappingURL=useSettingsApi-D7_a-esD.mjs.map