initial: bootstrap from BukidBountyApp base
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user