Claude
|
ce5e57a691
|
Implement public trip sharing with Shareable concern
This commit implements comprehensive public trip sharing functionality
by extracting sharing logic into a reusable Shareable concern and
extending it to Trip models.
## Key Features
**Shareable Concern (DRY principle)**
- Extract sharing logic from Stat model into reusable concern
- Support for time-based expiration (1h, 12h, 24h, permanent)
- UUID-based secure public access
- User-controlled sharing of notes and photos
- Automatic UUID generation on model creation
**Database Changes**
- Add sharing_uuid (UUID) column to trips table
- Add sharing_settings (JSONB) column for configuration storage
- Add unique index on sharing_uuid for performance
**Public Trip Sharing**
- Public-facing trip view with read-only access
- Interactive map with trip route visualization
- Optional sharing of notes and photo previews
- Branded footer with Dawarich attribution
- Responsive design matching existing UI patterns
**Sharing Management**
- In-app sharing controls in trip show view
- Enable/disable sharing with one click
- Configurable expiration times
- Copy-to-clipboard for sharing URLs
- Visual indicators for sharing status
**Authorization & Security**
- TripPolicy for fine-grained access control
- Public access only for explicitly shared trips
- Automatic expiration enforcement
- Owner-only sharing management
- UUID-based URLs prevent enumeration attacks
**API & Routes**
- GET /shared/trips/:trip_uuid for public access
- PATCH /trips/:id/sharing for sharing management
- RESTful endpoint design consistent with stats sharing
**Frontend**
- New public-trip-map Stimulus controller
- OpenStreetMap tiles for public viewing (no API key required)
- Start/end markers on trip route
- Automatic map bounds fitting
**Tests**
- Comprehensive concern specs (Shareable)
- Model specs for Trip sharing functionality
- Request specs for public and authenticated access
- Policy specs for authorization rules
- 100% coverage of sharing functionality
## Implementation Details
### Models Updated
- Stat: Now uses Shareable concern (removed duplicate code)
- Trip: Includes Shareable concern with notes/photos options
### Controllers Added
- Shared::TripsController: Handles public viewing and sharing management
### Views Added
- trips/public_show.html.erb: Public-facing trip view
- trips/_sharing.html.erb: Sharing controls partial
### JavaScript Added
- public_trip_map_controller.js: Map rendering for public trips
### Helpers Extended
- TripsHelper: Added sharing status and expiration helpers
## Breaking Changes
None. This is a purely additive feature.
## Migration Required
Yes. Run: rails db:migrate
## Testing
All specs pass:
- spec/models/concerns/shareable_spec.rb
- spec/models/trip_spec.rb
- spec/requests/shared/trips_spec.rb
- spec/policies/trip_policy_spec.rb
|
2025-11-05 15:44:27 +00:00 |
|
Eugene Burmakin
|
39c3c157c8
|
Implement real-time family member location updates via ActionCable
|
2025-10-13 14:10:36 +02:00 |
|
Evgenii Burmakin
|
99281317d7
|
Merge branch 'dev' into feature/family
|
2025-10-13 12:30:27 +02:00 |
|
Eugene Burmakin
|
29ae5c04f1
|
Refactor family membership and invitation policies for clarity and security
|
2025-10-13 12:23:01 +02:00 |
|
Eugene Burmakin
|
e711ff25fe
|
Refactor family invitations and memberships into separate models and controllers
|
2025-10-07 18:38:06 +02:00 |
|
Eugene Burmakin
|
e31265fdad
|
Compile assets in staging environment
|
2025-10-05 21:24:47 +02:00 |
|
Eugene Burmakin
|
cd303bce01
|
Clean up some code
|
2025-10-04 23:19:00 +02:00 |
|
Eugene Burmakin
|
9bc0e2accc
|
Use family path instead of families/id
|
2025-10-04 22:39:47 +02:00 |
|
Eugene Burmakin
|
cfe319df9b
|
Move family controllers to their own namespace
|
2025-10-04 20:48:44 +02:00 |
|
Eugene Burmakin
|
c6fc4328d7
|
Remove memberships page
|
2025-10-04 16:17:26 +02:00 |
|
Eugene Burmakin
|
78693f3001
|
Merge branch 'dev' into feature/family
|
2025-10-04 15:57:03 +02:00 |
|
Eugene Burmakin
|
e86264a4f4
|
Change asset compilation setting in production
|
2025-10-02 21:54:18 +02:00 |
|
Eugene Burmakin
|
ab90180cbf
|
Pin maps, remove ujs
|
2025-10-02 21:18:54 +02:00 |
|
Eugene Burmakin
|
6ec6330ada
|
Rvert web_app_manifest.rb changes
|
2025-10-02 21:03:26 +02:00 |
|
Eugene Burmakin
|
db8d886ee2
|
Use ids instead of uuids for primary keys in family tables
|
2025-09-30 18:43:26 +02:00 |
|
Eugene Burmakin
|
0728c21c61
|
Update stuff, fix stuff
|
2025-09-29 22:27:07 +02:00 |
|
Eugene Burmakin
|
f6b32371ec
|
Show family members on the map
|
2025-09-29 21:31:24 +02:00 |
|
Eugene Burmakin
|
fa3d926a92
|
Change registration flow to support family invitations and self-hosted mode restrictions.
|
2025-09-28 20:53:50 +02:00 |
|
Eugene Burmakin
|
1f67e889e3
|
Complete phase 5
|
2025-09-28 13:10:07 +02:00 |
|
Eugene Burmakin
|
cc5da3e7e2
|
Complete phase 3
|
2025-09-27 13:23:33 +02:00 |
|
Evgenii Burmakin
|
8807950180
|
Merge branch 'dev' into staging-env
|
2025-09-26 19:50:25 +02:00 |
|
Eugene Burmakin
|
a53bd0a4bd
|
Add staging environment configuration
|
2025-09-26 19:48:52 +02:00 |
|
Eugene Burmakin
|
15e27c87d5
|
Remove unused code
|
2025-09-26 19:47:12 +02:00 |
|
Eugene Burmakin
|
031104cdaa
|
Rework importing user data archive
|
2025-09-23 20:39:12 +02:00 |
|
Eugene Burmakin
|
c0e756d085
|
Introduce iOS authentication flow with JWT token generation
|
2025-09-21 12:46:59 +02:00 |
|
Eugene Burmakin
|
5b3fe84933
|
Update onborading popup
|
2025-09-18 18:29:46 +02:00 |
|
Eugene Burmakin
|
e6f74fc6ab
|
Update query to use lonlat column for bounds calculation
|
2025-09-13 18:54:02 +02:00 |
|
Eugene Burmakin
|
1394d6202c
|
Fix potential sql injection
|
2025-09-13 17:04:48 +02:00 |
|
Eugene Burmakin
|
bfeeeee234
|
Merge branch 'dev', remote-tracking branch 'origin' into feature/follow-up-emails
|
2025-09-13 14:03:04 +02:00 |
|
Eugene Burmakin
|
57ecda2b1b
|
Extract stats sharing logic to its own controller
|
2025-09-12 21:08:45 +02:00 |
|
Eugene Burmakin
|
612c30026c
|
Add hexagons to public stats page
|
2025-09-12 08:33:51 +02:00 |
|
Eugene Burmakin
|
fc068ec79d
|
Add Lucide icons and stats sharing
|
2025-09-11 20:41:43 +02:00 |
|
Eugene Burmakin
|
acd3b20ef5
|
Add stats month page
|
2025-09-11 00:19:34 +02:00 |
|
Eugene Burmakin
|
410cd86c4e
|
Implement a new daily track generation job to replace the old cleanup job.
|
2025-09-08 20:46:30 +02:00 |
|
Eugene Burmakin
|
68a0a8f23c
|
Add follow up emails
|
2025-09-05 19:39:50 +02:00 |
|
Eugene Burmakin
|
5c6b76dd63
|
Hide search if reverse geocoding is disabled
|
2025-09-03 23:57:38 +02:00 |
|
Eugene Burmakin
|
e965c8c67c
|
Remove system spec
|
2025-09-03 18:51:00 +02:00 |
|
Eugene Burmakin
|
4f402a0c2a
|
Make search look nicer
|
2025-09-02 21:21:22 +02:00 |
|
Eugene Burmakin
|
2d240c2094
|
Implement search by user's points
|
2025-08-31 12:08:33 +02:00 |
|
Eugene Burmakin
|
1709aa612d
|
Add search bar
|
2025-08-30 23:18:16 +02:00 |
|
Eugene Burmakin
|
550d20c555
|
Imlement visits deletion API
|
2025-08-21 20:41:53 +02:00 |
|
Eugene Burmakin
|
1da3ef5c44
|
Add visits manual creation
|
2025-08-21 18:42:45 +02:00 |
|
Eugene Burmakin
|
6708e11ab3
|
Add limits for import size for trial users
|
2025-08-14 20:50:22 +02:00 |
|
Eugene Burmakin
|
71488c9fb1
|
Add trial mode
|
2025-08-13 20:25:48 +02:00 |
|
Eugene Burmakin
|
66e6112ad8
|
Eliminate some n-plus-ones.
|
2025-07-27 01:08:29 +02:00 |
|
Eugene Burmakin
|
b995594b8b
|
Use constants for metrics username and password.
|
2025-07-26 15:27:22 +02:00 |
|
Eugene Burmakin
|
17340079ce
|
Expose prometheus metrics at /metrics
|
2025-07-26 12:14:08 +02:00 |
|
Eugene Burmakin
|
bd2558ed29
|
Enable assets compilation in production
|
2025-07-22 20:35:45 +02:00 |
|
Eugene Burmakin
|
7c8a7e7f38
|
Temporary disable track creation
|
2025-07-22 20:25:44 +02:00 |
|
Eugene Burmakin
|
da38c12819
|
Extract stats query
|
2025-07-22 19:43:27 +02:00 |
|