Files
BarangaySystem/ai-docs/todo-completed/todo-e0c3999faec41d0ae35b9b1cdde71c765405b54f53257fbdf810993f2e872905.md
2026-06-06 18:43:00 +08:00

3.9 KiB

TODO: Allow Users to Join Cooperatives via User Settings

Overview

Implement functionality to allow users to join cooperatives stored in the user's settings JSON field, with a dedicated composable and controller for managing user additional details and enabling quick search of users by cooperative membership.


Step 1: Database Schema Update

  • Verify that settings field in users table is already JSON type (already exists and cast as array)
  • No migration needed - settings field already supports array data

Step 2: Create UserAdditionalDetailsController

  • Create app/Http/Controllers/UserManagement/UserAdditionalDetailsController.php
  • Implement getDetails() method - Retrieve user's additional details including cooperatives
  • Implement updateCooperatives() method - Add/remove cooperatives from user settings
  • Implement searchUsersByCooperative() method - Quick search for users by cooperative hashkey
  • Implement getUserCooperatives() method - Get all cooperatives a user has joined
  • Use ResponseHelper for consistent API responses
  • Add proper authorization checks using UserPermissions

Step 3: Create useUserAdditionalDetails Composable

  • Create resources/js/composables/useUserAdditionalDetails.js
  • Implement fetchUserDetails() - Fetch current user's additional details
  • Implement joinCooperative(cooperativeHash) - Add cooperative to user's settings
  • Implement leaveCooperative(cooperativeHash) - Remove cooperative from user's settings
  • Implement getJoinedCooperatives() - Get list of cooperatives user has joined
  • Implement searchUsersByCooperative(cooperativeHash) - Search users by cooperative
  • Add loading states and error handling
  • Follow existing composable patterns (useUserSettings.js as reference)

Step 4: Register Routes

  • Add routes in routes/api.php or appropriate route file:
    • POST /UserAdditionalDetails/Get - Get user details
    • POST /UserAdditionalDetails/UpdateCooperatives - Update cooperatives in settings
    • POST /UserAdditionalDetails/SearchByCooperative - Search users by cooperative
    • POST /UserAdditionalDetails/GetCooperatives - Get user's cooperatives

Step 5: Update User Model (if needed)

  • Verify settings field is in $fillable array (already present)
  • Verify settings field is cast as array (already present)
  • Add helper method getCooperativesAttribute() to easily access cooperatives from settings
  • Add helper method hasJoinedCooperative($cooperativeHash) to check membership

Step 6: Integration with Existing Cooperative System

  • Ensure compatibility with existing CooperativeController::joinCooperative()
  • When user joins via CooperativeController, also update user settings
  • Maintain consistency between cooperative_members table and user settings

Step 7: Testing & Validation

  • Test joining a cooperative updates user settings correctly
  • Test leaving a cooperative removes from user settings
  • Test quick search returns correct users by cooperative
  • Test authorization and permission checks
  • Test edge cases (duplicate joins, non-existent cooperatives)

Files to Create/Modify

  1. NEW: app/Http/Controllers/UserManagement/UserAdditionalDetailsController.php
  2. NEW: resources/js/composables/useUserAdditionalDetails.js
  3. MODIFY: routes/api.php (or appropriate route file)
  4. MODIFY: app/Models/User.php (add helper methods)
  5. MODIFY: app/Http/Controllers/Market/CooperativeController.php (sync with settings)

Technical Notes

  • Cooperatives will be stored in settings.cooperatives as an array of hashkeys
  • Example structure: settings: { cooperatives: ['hash1', 'hash2', ...] }
  • Quick search should use JSON query to find users with specific cooperative in settings
  • Follow existing patterns from useUserSettings.js and CooperativeController.php