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
|
732839d586
|
Update icons on the map
|
2025-10-14 13:47:41 +02: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
|
923ea113c8
|
Fix some minor stuff
|
2025-10-11 14:17:48 +02:00 |
|
Eugene Burmakin
|
ab4786d7b9
|
Fix minor bugs in Stat model related to sharing settings
|
2025-10-07 21:24:38 +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
|
018760812a
|
Extract family functionality to a concern
|
2025-10-05 14:24:45 +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
|
f6b32371ec
|
Show family members on the map
|
2025-09-29 21:31:24 +02:00 |
|
Eugene Burmakin
|
2eb374676a
|
Hide invitation form when family is at capacity
|
2025-09-28 18:23:05 +02:00 |
|
Eugene Burmakin
|
1f67e889e3
|
Complete phase 5
|
2025-09-28 13:10:07 +02:00 |
|
Eugene Burmakin
|
e17f732706
|
Minor changes
|
2025-09-27 21:14:40 +02:00 |
|
Eugene Burmakin
|
0d02f08199
|
Add implementation plan and complete phase 1
|
2025-09-27 00:46:29 +02:00 |
|
Eugene Burmakin
|
63aa197a29
|
Update error message
|
2025-09-23 21:16:25 +02:00 |
|
Eugene Burmakin
|
6a0cc112dc
|
Introduce limit for trial users: max 5 imports, 10MB per file
|
2025-09-23 21:14:55 +02:00 |
|
Eugene Burmakin
|
6e44425e4e
|
Recalculate stats when an import is deleted.
|
2025-09-22 20:30:10 +02:00 |
|
Eugene Burmakin
|
339ba3130e
|
Fix missing hexagons
|
2025-09-20 14:05:14 +02:00 |
|
Eugene Burmakin
|
2c55ca07e7
|
Remove permanent option from stats sharing options, default to 24h expiration.
|
2025-09-19 23:49:32 +02:00 |
|
Eugene Burmakin
|
2bd0390d1a
|
Rename hexagon_centers to h3_hex_ids and update related logic
|
2025-09-19 00:23:12 +02:00 |
|
Eugene Burmakin
|
0905ef65a5
|
Don't pass h3_resolution from frontend; use default in backend service
|
2025-09-18 19:45:53 +02:00 |
|
Eugene Burmakin
|
6314442770
|
Calculate only centers of hexagons
|
2025-09-14 12:41:16 +02:00 |
|
Eugene Burmakin
|
dc13bc1fd2
|
Update public_month page
|
2025-09-13 23:23:48 +02:00 |
|
Eugene Burmakin
|
a2aa1be271
|
Precalculate hexagons for stats
|
2025-09-13 23:11:42 +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
|
dcd1c7ab2b
|
Add some refactorings
|
2025-09-13 16:41:28 +02:00 |
|
Eugene Burmakin
|
774860220e
|
Add missing email templates for post-trial reminders
|
2025-09-13 15:37:09 +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
|
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
|
5ab382936d
|
Merge branch 'dev', remote-tracking branch 'origin' into feature/tracks-on-ruby
|
2025-08-29 10:57:08 +02:00 |
|
Eugene Burmakin
|
3e1ba6d183
|
Update changelog
|
2025-08-29 10:43:49 +02:00 |
|
Eugene Burmakin
|
9856ab56c6
|
Add default value for points_count attribute
|
2025-08-29 10:07:00 +02:00 |
|
Eugene Burmakin
|
22daed7291
|
Move welcome emails placement
|
2025-08-26 16:37:21 +02:00 |
|
Evgenii Burmakin
|
02e6fb8a85
|
Merge branch 'dev' into feature/points-counter-cache
|
2025-08-26 15:09:48 +02:00 |
|
Eugene Burmakin
|
b049c11542
|
Fix import detection
|
2025-08-23 16:07:15 +02:00 |
|
Eugene Burmakin
|
6e4934a93d
|
Introduce points counter cache to optimize performance
|
2025-08-21 22:32:29 +02:00 |
|
Eugene Burmakin
|
efc7ffa579
|
Extract visit creation to a service
|
2025-08-21 18:58:59 +02:00 |
|
Evgenii Burmakin
|
ead1673cc5
|
Merge branch 'dev' into feature/trial
|
2025-08-19 20:58:00 +02:00 |
|
Eugene Burmakin
|
b9764d39c3
|
Skip trial emails for active users
|
2025-08-19 18:55:22 +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
|
74112c0d04
|
Calculate trip's visited countries from points
|
2025-08-02 00:06:09 +02:00 |
|
Eugene Burmakin
|
ad5670072e
|
Merge branch 'dev' into feature/tracks-on-ruby
|
2025-08-01 20:37:32 +02:00 |
|
Eugene Burmakin
|
6870be2045
|
Fix country name in points
|
2025-07-29 21:17:33 +02:00 |
|