Commit graph

513 commits

Author SHA1 Message Date
434bcd269f refactor: use sql_sandbox config instead of env for sync/async
- Replace Application.get_env(:mv, :env) with :sql_sandbox config
- Remove redundant :env config from test.exs
- More explicit and less error-prone for test environment detection
2025-12-16 16:40:11 +01:00
25cc41b02e feat: implement automatic cycle generation for members
- Add CycleGenerator module with advisory lock mechanism
- Add SetMembershipFeeStartDate change for auto-calculation
- Extend Settings with include_joining_cycle and default_membership_fee_type_id
- Add scheduled job skeleton for future Oban integration
2025-12-16 16:40:11 +01:00
894b9b9d5c Merge pull request 'Calendar Cycle Calculation Logic closes #276' (#284) from feature/276_cycle_calculation into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #284
Reviewed-by: carla <carla@noreply.git.local-it.org>
2025-12-16 16:39:35 +01:00
a7285915e6 docs: fix CalendarCycles documentation to match actual implementation
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-16 15:06:45 +01:00
da6c495d04 refactor: improve CalendarCycles API and tests based on code review 2025-12-16 15:06:45 +01:00
3fc4440bce feat: implement calendar-based cycle calculation functions
Add CalendarCycles module with functions for all interval types.
Includes comprehensive tests for edge cases.
2025-12-16 15:06:45 +01:00
0a07f4f212 Merge pull request 'Small UX fixes closes #281' (#293) from feature/281_uxfixes into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #293
2025-12-16 15:06:00 +01:00
1df1b4b238 test: use data-testids instead of regex in a11y tests
All checks were successful
continuous-integration/drone/push Build is passing
Replace regex-based aria-label assertions with data-testid-based
has_element? checks for more stable tests that are resistant to
translation changes.
2025-12-16 14:55:50 +01:00
62d04add8e fix: standardize 'Custom Field' capitalization in i18n
Change 'Save Custom field' to 'Save Custom Field' and
'Save Custom field value' to 'Save Custom Field Value' for consistency.
Update gettext files accordingly.
2025-12-16 14:54:43 +01:00
9f9d888657 test: add tests for disabled button states in member index
Add tests to verify that copy and open-email buttons are disabled
when no members are selected and enabled after selection.
Also verify that the counter shows the correct count.
2025-12-16 14:53:10 +01:00
be6ea56860 fix: improve mailto BCC encoding
Use URI.encode_www_form() instead of URI.encode() for mailto query parameters.
This is the safer choice for query parameter encoding.

Add comment about mailto URL length limits that vary by email client.
2025-12-16 14:51:42 +01:00
fb91f748c2 perf: optimize member index selection calculations
Calculate selected_count, any_selected? and mailto_bcc once in assigns
instead of recalculating Enum.any? and Enum.count multiple times in template.
This improves render performance and makes the template code more readable.
2025-12-16 14:50:52 +01:00
222af635ae fix: make disabled links more robust in CoreComponents.button
Remove navigation attributes (href, navigate, patch) when disabled=true
to prevent 'Open in new tab' and 'Copy link' from working on disabled links.
This makes the disabled state semantically stronger and independent of CSS themes.
2025-12-16 14:48:18 +01:00
dd4048669c fix: update clubname on save
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-16 14:35:00 +01:00
e0712d47bc chore: change payment filter text 2025-12-16 14:35:00 +01:00
4e86351e1c feat: disable email buttons instead hide them 2025-12-16 14:35:00 +01:00
8bfa5b7d1d chore: remove immutable from custom fields 2025-12-16 14:35:00 +01:00
cb82c07cbf Merge pull request 'Membership Fee - Database Schema & Ash Domain Foundation closes #275' (#283) from feature/275_member_fee_domain into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #283
Reviewed-by: carla <carla@noreply.git.local-it.org>
2025-12-16 14:06:45 +01:00
ebbf347e42 fix(membership-fees): add DB constraints for enum and decimal precision
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 18:46:48 +01:00
4d1b33357e feat(membership-fees): add database schema and Ash domain structure 2025-12-11 18:46:48 +01:00
e563d12be3 Merge pull request 'chore(deps): update ghcr.io/sebadob/rauthy docker tag to v0.33.1' (#179) from renovate/ghcr.io-sebadob-rauthy-0.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #179
2025-12-11 18:46:22 +01:00
Renovate Bot
2abbb789b7 chore(deps): update ghcr.io/sebadob/rauthy docker tag to v0.33.1
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 18:44:05 +01:00
045f0dc603 Merge pull request 'chore(deps): update dependency just to v1.45.0' (#269) from renovate/asdf-tool-versions into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #269
2025-12-11 18:42:16 +01:00
Renovate Bot
f480c12bb0 chore(deps): update dependency just to v1.45.0
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 18:39:45 +01:00
2d259e8083 Merge pull request 'chore(deps): update postgres to v17.7' (#253) from renovate/postgres into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #253
2025-12-11 17:05:08 +01:00
15bc2223f0
chore: update prod postgres to version 17.7
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 16:47:02 +01:00
Renovate Bot
110e7f6cbd
chore(deps): update postgres to v17.7 2025-12-11 16:45:56 +01:00
3710d70024 Merge pull request 'Member Fee Concept closes #210' (#221) from docs/210_payment-concept into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #221
Reviewed-by: carla <carla@noreply.git.local-it.org>
2025-12-11 15:54:29 +01:00
3fd8483231 docs: small changes based on review
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 15:52:32 +01:00
f5ef16ec20 docs: change wording
contribution -> membership fee
period -> cycle
2025-12-11 15:52:32 +01:00
85a66f800e Merge pull request 'chore(deps): update dependency gettext to v1' (#185) from renovate/major-mix-dependencies into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #185
2025-12-11 15:28:45 +01:00
Renovate Bot
dbcfe6a29f chore(deps): update dependency gettext to v1
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 14:56:19 +01:00
0a2632102c Merge pull request 'chore(deps): update mix dependencies' (#249) from renovate/mix-dependencies into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #249
2025-12-11 14:55:51 +01:00
9dba4d1019
fix: credo warnings
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 14:21:40 +01:00
Renovate Bot
1c60bc77b4 chore(deps): update mix dependencies
Some checks reported errors
continuous-integration/drone/push Build was killed
2025-12-11 14:17:40 +01:00
d5ac168add Merge pull request 'Implements search for custom fields closes #196' (#266) from feature/196_search_custom_fields into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #266
2025-12-11 14:07:40 +01:00
00fe471bc0 fix: custom field substring search - pass id as parameter
All checks were successful
continuous-integration/drone/push Build is passing
Fragment 'member_id = id' did not resolve correctly. Now passes id as
Ash expression. Also changed LIKE to ILIKE for case-insensitive search.
2025-12-11 14:04:13 +01:00
ca5fad0dcc
security: add input sanitization for search queries
All checks were successful
continuous-integration/drone/push Build is passing
- Escape SQL LIKE wildcards (% and _) to prevent pattern injection
- Limit search query length to 100 characters
- Apply sanitization in both :search action and linking filters
- FTS and fuzzy search use unsanitized query (wildcards not special there)
2025-12-11 13:49:07 +01:00
1ec6188884
perf: remove custom field search from user-linking autocomplete
Custom field LIKE queries on JSONB are expensive (no index).
User linking only needs name/email search for autocomplete.
Custom fields are still searchable via main member search (uses FTS index).
Remove unnecessary credo:disable as function complexity is now acceptable.
2025-12-11 13:49:07 +01:00
062dad99fb
refactor: remove unused fields parameter from fuzzy_search API
The fields parameter was accepted but never used in the :search action.
Simplify API to only accept the query parameter.
Update @doc to reflect the actual functionality.
2025-12-11 13:49:07 +01:00
12f95c1998
docs: document fuzzy search similarity threshold strategy
Explain the two-tier matching approach:
- % operator with server-wide threshold (0.3) for fast index scans
- similarity functions with configurable threshold (0.2) for edge cases
Add rationale for threshold value based on German name testing
2025-12-11 13:49:06 +01:00
add855c8cb
refactor: remove redundant ilike filter in build_substring_filter
contains(city, ^query) already produces ILIKE '%query%'
ilike(city, ^pattern) with pattern="%query%" is identical
2025-12-11 13:49:06 +01:00
265e976d94
fix: simplify JSONB extraction - remove redundant operators
- Replace 4 LIKE checks with 2 in build_custom_field_filter
- Simplify CASE blocks in migration trigger functions
- ->> operator always returns text, no need for -> + ::text fallback
- Performance improvement: 50% fewer LIKE operations
2025-12-11 13:49:05 +01:00
014ef04853 docs: updated docs
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 13:44:30 +01:00
8c361cfc88 feat: updates query in member ressource 2025-12-11 13:44:30 +01:00
c2302c5861 chore: adds migration for ts vector custom field 2025-12-11 13:44:30 +01:00
a729d81bb9 test: adds tests for custom field search 2025-12-11 13:44:30 +01:00
37495095c9 Merge pull request 'chore(deps): update renovate/renovate docker tag to v42' (#257) from renovate/renovate-renovate-42.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #257
2025-12-11 13:26:13 +01:00
Renovate Bot
9150188922 chore(deps): update renovate/renovate docker tag to v42
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-11 02:30:06 +00:00
9ff7d7d17b Merge pull request 'Fix small UI issues closes #220' (#259) from feature/220_ui_issues_2 into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #259
2025-12-11 02:13:29 +01:00