yari-garan/src/modules/dashboard/service/user.service.ts
MehrdadAdabi ce4c33d46d feat: Implement dashboard profile card and campaigns management
- Added ProfileCard component to display user profile information.
- Created DashboardLayout for consistent layout structure.
- Defined Campaign and related types for campaign management.
- Developed CampaignDetailPage for viewing individual campaign details.
- Implemented CampaignsPage for listing and filtering campaigns.
- Enhanced DashboardPage with user profile fetching and navigation.
- Built RegisterPage for user profile registration and updates.
- Added user service for fetching and updating user profiles.
- Established campaigns service for managing campaign data and interactions.
- Updated routing constants and router configuration for new pages.
2025-11-23 18:10:30 +03:30

82 lines
2.3 KiB
TypeScript

import { API_ADDRESS } from "@/core/service/api-address";
import api from "@/core/service/axios";
import type { RegistrationFormData } from "@modules/dashboard/pages/profile/profile.type";
import { to } from "await-to-js";
export const fetchUserProfile = async () => {
const person = JSON.parse(localStorage.getItem("person") || "{}");
const query = {
ProcessName: "user",
OutputFields: [
"username",
"name",
"family",
"education_level",
"base",
"account_type",
"nickname",
"school_code",
"school_code.title",
"invitor",
"nationalcode",
],
conditions: [["username", "=", person.ID]],
};
const res = await api.post(API_ADDRESS.select, query);
if (!res.data || res.data.length === 0) {
throw new Error("User not found");
}
const user = JSON.parse(res.data.data)[0];
if (user) localStorage.setItem("person", JSON.stringify(user));
return {
username: user.username,
name: user.name,
family: user.family,
educationLevel: user.education_level,
base: user.base,
userType: user.account_type,
nickname: user.nickname,
schoolCode: user.school_code,
invitor: user.invitor,
nationalcode: user.nationalcode,
};
};
export const updateUserProfile = async (data: RegistrationFormData) => {
const personStr = localStorage.getItem("person");
if (!personStr) {
throw new Error("کاربر وارد سیستم نشده است");
}
const person = JSON.parse(personStr);
const natinalCode = person.NationalCode;
let payload = {
user: {
username: String(person.ID),
name: data.name.trim(),
family: data.family.trim(),
nickname: data.nickname.trim() || undefined,
education_level: data.education_level,
base: data.base,
account_type: "عادی",
nationalcode: data.nationalcode,
...(data.school_code && { school_code: data.school_code.trim() }),
...(data.invitor && { invitor: data.invitor.trim() }),
...(natinalCode && { WorkflowID: person.ID }),
},
};
const [error, response] = await to(api.post(API_ADDRESS.save, payload));
if (error) {
console.error("خطا در ارسال اطلاعات پروفایل:", error.message || error);
throw error;
}
return response?.data;
};