83 lines
3.9 KiB
Markdown
83 lines
3.9 KiB
Markdown
# 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` |