implement child user management functions and user type utilities

This commit is contained in:
Mo Tarbin
2025-09-28 19:13:28 -04:00
parent d41d6bd758
commit 26c2eaddff
2 changed files with 115 additions and 1 deletions

View File

@@ -668,7 +668,13 @@ const RestoreBackup = (encryptionKey, backupData) => {
})
}
const RegisterDeviceToken = (token, deviceId, platform, appVersion, deviceModel) => {
const RegisterDeviceToken = (
token,
deviceId,
platform,
appVersion,
deviceModel,
) => {
return Fetch(`/devices/tokens`, {
method: 'POST',
headers: HEADERS(),
@@ -700,6 +706,44 @@ const GetDeviceTokens = (active = true) => {
})
}
// Child User Management Functions
const CreateChildUser = (childName, displayName, password) => {
return Fetch(`/users/subaccounts`, {
method: 'POST',
headers: HEADERS(),
body: JSON.stringify({
childName,
displayName,
password,
}),
})
}
const GetChildUsers = () => {
return Fetch(`/users/subaccounts`, {
method: 'GET',
headers: HEADERS(),
})
}
const UpdateChildPassword = (childUserId, password) => {
return Fetch(`/users/subaccounts/password`, {
method: 'PUT',
headers: HEADERS(),
body: JSON.stringify({
childUserId,
password,
}),
})
}
const DeleteChildUser = childUserId => {
return Fetch(`/users/subaccounts/${childUserId}`, {
method: 'DELETE',
headers: HEADERS(),
})
}
export {
AcceptCircleMemberRequest,
ApproveChore,
@@ -711,10 +755,12 @@ export {
CompleteSubTask,
ConfirmMFA,
CreateBackup,
CreateChildUser,
CreateChore,
CreateLabel,
CreateLongLiveToken,
CreateThing,
DeleteChildUser,
DeleteChore,
DeleteChoreHistory,
DeleteCircleMember,
@@ -727,6 +773,7 @@ export {
GetAllCircleMembers,
GetAllUsers,
GetArchivedChores,
GetChildUsers,
GetChoreByID,
GetChoreDetailById,
GetChoreHistory,
@@ -768,6 +815,7 @@ export {
StartChore,
UnArchiveChore,
UnregisterDeviceToken,
UpdateChildPassword,
UpdateChoreAssignee,
UpdateChoreHistory,
UpdateChorePriority,

66
src/utils/UserHelpers.js Normal file
View File

@@ -0,0 +1,66 @@
// User type detection and permission utilities
export const USER_TYPES = {
PARENT: 0,
CHILD: 1,
}
export const isParentUser = (user) => {
if (!user) return false
return user.userType === USER_TYPES.PARENT && !user.parentUserId
}
export const isChildUser = (user) => {
if (!user) return false
return user.userType === USER_TYPES.CHILD && user.parentUserId !== null
}
export const canManageChildUsers = (user) => {
return isParentUser(user)
}
export const canCreateChores = (user) => {
// Both parent and child users can create chores
return user && (isParentUser(user) || isChildUser(user))
}
export const canManageCircle = (user) => {
// Only parent users can manage circle settings
return isParentUser(user)
}
export const canAccessAdminSettings = (user) => {
// Only parent users can access admin settings like API tokens, MFA, etc.
return isParentUser(user)
}
export const getUserDisplayInfo = (user) => {
if (!user) return { displayName: '', username: '', userType: 'unknown' }
return {
displayName: user.displayName || user.username,
username: user.username,
userType: isParentUser(user) ? 'parent' : isChildUser(user) ? 'child' : 'unknown',
parentUserId: user.parentUserId,
circleID: user.circleID,
}
}
export const getChildUsernameFromCombined = (combinedUsername) => {
// Extract child name from format: parent_child
const parts = combinedUsername.split('_')
if (parts.length >= 2) {
return parts.slice(1).join('_') // In case child name contains underscores
}
return combinedUsername
}
export const getParentUsernameFromCombined = (combinedUsername) => {
// Extract parent name from format: parent_child
const parts = combinedUsername.split('_')
return parts[0] || combinedUsername
}
export const buildChildUsername = (parentUsername, childName) => {
return `${parentUsername}_${childName}`
}