Skip to content

Commit db97f77

Browse files
committed
Refactor notes selectors to use enum classes
Replaced integer-based passage_selector and edit_selector in Database_Notes::selector with strongly-typed enum classes. Updated all usages and switch statements to use the new enums, improving type safety and code clarity throughout the codebase. #1046
1 parent 912654b commit db97f77

File tree

9 files changed

+83
-65
lines changed

9 files changed

+83
-65
lines changed

changes/change.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ std::string changes_change (Webserver_Request& webserver_request)
127127
.book = passage.m_book, \
128128
.chapter = passage.m_chapter,
129129
.verse = filter::strings::convert_to_int (passage.m_verse),
130-
.passage_selector = 0,
131-
.edit_selector = 0,
130+
.passage_selector = Database_Notes::passage_selector::current_verse,
131+
.edit_selector = Database_Notes::edit_selector::at_any_time,
132132
.non_edit_selector = 0,
133133
.status_selectors = {},
134134
.assignment_selector = "",

database/notes.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -611,53 +611,56 @@ std::vector<int> Database_Notes::select_notes(const selector& selector)
611611
// Consider passage selector.
612612
std::string passage;
613613
switch (selector.passage_selector) {
614-
case 0:
614+
case passage_selector::current_verse:
615615
// Select notes that refer to the current verse.
616616
// It means that the book, the chapter, and the verse, should match.
617617
passage = encode_passage (selector.book, selector.chapter, selector.verse);
618618
query.append (" AND passage LIKE '%" + passage + "%' ");
619619
break;
620-
case 1:
620+
case passage_selector::current_chapter:
621621
// Select notes that refer to the current chapter.
622622
// It means that the book and the chapter should match.
623623
passage = encode_passage (selector.book, selector.chapter, -1);
624624
query.append (" AND passage LIKE '%" + passage + "%' ");
625625
break;
626-
case 2:
626+
case passage_selector::current_book:
627627
// Select notes that refer to the current book.
628628
// It means that the book should match.
629629
passage = encode_passage (selector.book, -1, -1);
630630
query.append (" AND passage LIKE '%" + passage + "%' ");
631631
break;
632-
case 3:
632+
case passage_selector::any_passage:
633+
default:
633634
// Select notes that refer to any passage: No constraint to apply here.
634635
break;
635-
default: break;
636636
}
637637
// Consider edit selector.
638638
int time { 0 };
639639
switch (selector.edit_selector) {
640-
case 0:
640+
case edit_selector::at_any_time:
641641
// Select notes that have been edited at any time. Apply no constraint.
642642
time = 0;
643643
break;
644-
case 1:
644+
case edit_selector::during_last_30_days:
645645
// Select notes that have been edited during the last 30 days.
646646
time = filter::date::seconds_since_epoch () - 30 * 24 * 3600;
647647
break;
648-
case 2:
648+
case edit_selector::during_last_7_days:
649649
// Select notes that have been edited during the last 7 days.
650650
time = filter::date::seconds_since_epoch () - 7 * 24 * 3600;
651651
break;
652-
case 3:
652+
case edit_selector::since_yesterday:
653653
// Select notes that have been edited since yesterday.
654654
time = filter::date::seconds_since_epoch () - 1 * 24 * 3600 - filter::date::numerical_hour (filter::date::seconds_since_epoch ()) * 3600;
655655
break;
656-
case 4:
656+
case edit_selector::today:
657657
// Select notes that have been edited today.
658658
time = filter::date::seconds_since_epoch () - filter::date::numerical_hour (filter::date::seconds_since_epoch ()) * 3600;
659659
break;
660-
default: break;
660+
default:
661+
// No constraint.
662+
time = 0;
663+
break;
661664
}
662665
if (time != 0) {
663666
query.append (" AND modified >= ");

database/notes.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,33 @@ class Database_Notes
7070
int get_new_unique_identifier ();
7171

7272
public:
73+
enum class passage_selector : uint8_t {
74+
current_verse = 0,
75+
current_chapter = 1,
76+
current_book = 2,
77+
any_passage = 3
78+
};
79+
enum class edit_selector : uint8_t {
80+
at_any_time = 0,
81+
during_last_30_days = 1,
82+
during_last_7_days = 2,
83+
since_yesterday = 3,
84+
today = 4,
85+
};
7386
struct selector {
7487
// Container of Bible names that is going to be searched.
7588
// Can contains all Bibles the user has read access to.
7689
// Or can contain one Bible to be searched.
7790
std::vector<std::string> bibles{};
7891
// Four related selectors that can limit the selection.
92+
// By default there's no constraint set for the passage.
7993
int book{};
8094
int chapter{};
8195
int verse{};
82-
int passage_selector{}; // Todo default? Enum?
96+
passage_selector passage_selector{passage_selector::any_passage};
8397
// Optionally constrains selection based on modification time.
84-
int edit_selector{}; // Todo default and enum?
98+
// By default there's no constraint on modification time.
99+
edit_selector edit_selector{edit_selector::at_any_time};
85100
int non_edit_selector{}; // Todo default and enum?
86101
// Optionally constrains selection based on list of note statuses.
87102
std::vector<std::string> status_selectors; // Todo enums?

notes/bulk.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ std::string notes_bulk (Webserver_Request& webserver_request)
7474
int book = Ipc_Focus::getBook (webserver_request);
7575
int chapter = Ipc_Focus::getChapter (webserver_request);
7676
int verse = Ipc_Focus::getVerse (webserver_request);
77-
int passage_selector = webserver_request.database_config_user()->get_consultation_notes_passage_selector();
77+
Database_Notes::passage_selector passage_selector = static_cast<Database_Notes::passage_selector>(webserver_request.database_config_user()->get_consultation_notes_passage_selector());
7878
int edit_selector = webserver_request.database_config_user()->get_consultation_notes_edit_selector();
7979
int non_edit_selector = webserver_request.database_config_user()->get_consultation_notes_non_edit_selector();
8080
const std::vector<std::string> status_selectors = webserver_request.database_config_user()->get_consultation_notes_status_selectors();
@@ -117,7 +117,7 @@ std::string notes_bulk (Webserver_Request& webserver_request)
117117
.chapter = chapter,
118118
.verse = verse,
119119
.passage_selector = passage_selector,
120-
.edit_selector = edit_selector,
120+
.edit_selector = static_cast<Database_Notes::edit_selector>(edit_selector),
121121
.non_edit_selector = non_edit_selector,
122122
.status_selectors = status_selectors,
123123
.assignment_selector = assignment_selector,

notes/notes.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ std::string notes_notes (Webserver_Request& webserver_request)
5656
int verse = Ipc_Focus::getVerse (webserver_request);
5757

5858

59-
int passage_selector = webserver_request.database_config_user()->get_consultation_notes_passage_selector();
59+
Database_Notes::passage_selector passage_selector = static_cast<Database_Notes::passage_selector>(webserver_request.database_config_user()->get_consultation_notes_passage_selector());
6060
int edit_selector = webserver_request.database_config_user()->get_consultation_notes_edit_selector();
6161
int non_edit_selector = webserver_request.database_config_user()->get_consultation_notes_non_edit_selector();
6262
const std::vector<std::string> status_selectors = webserver_request.database_config_user()->get_consultation_notes_status_selectors();
@@ -87,7 +87,7 @@ std::string notes_notes (Webserver_Request& webserver_request)
8787
.chapter = chapter,
8888
.verse = verse,
8989
.passage_selector = passage_selector,
90-
.edit_selector = edit_selector,
90+
.edit_selector = static_cast<Database_Notes::edit_selector>(edit_selector),
9191
.non_edit_selector = non_edit_selector,
9292
.status_selectors = status_selectors,
9393
.assignment_selector = assignment_selector,

notes/select.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ std::string notes_select (Webserver_Request& webserver_request)
333333
}
334334

335335

336-
const int passage_selector = webserver_request.database_config_user()->get_consultation_notes_passage_selector();
336+
const Database_Notes::passage_selector passage_selector = static_cast<Database_Notes::passage_selector>(webserver_request.database_config_user()->get_consultation_notes_passage_selector());
337337
const int edit_selector = webserver_request.database_config_user()->get_consultation_notes_edit_selector();
338338
const int non_edit_selector = webserver_request.database_config_user()->get_consultation_notes_non_edit_selector();
339339
const std::vector<std::string> status_selectors = webserver_request.database_config_user()->get_consultation_notes_status_selectors();
@@ -367,7 +367,7 @@ std::string notes_select (Webserver_Request& webserver_request)
367367
.chapter = chapter,
368368
.verse = verse,
369369
.passage_selector = passage_selector,
370-
.edit_selector = edit_selector,
370+
.edit_selector = static_cast<Database_Notes::edit_selector>(edit_selector),
371371
.non_edit_selector = non_edit_selector,
372372
.status_selectors = status_selectors,
373373
.assignment_selector = assignment_selector,

public/notes.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ std::string public_notes (Webserver_Request& webserver_request)
5656
.book = book,
5757
.chapter = chapter,
5858
.verse = 0,
59-
.passage_selector = 1,
60-
.edit_selector = 0,
59+
.passage_selector = Database_Notes::passage_selector::current_chapter,
60+
.edit_selector = Database_Notes::edit_selector::at_any_time,
6161
.non_edit_selector = 0,
6262
.status_selectors = {},
6363
.assignment_selector = "",

statistics/statistics.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ void statistics_statistics ()
7272
.book = 0,
7373
.chapter = 0,
7474
.verse = 0,
75-
.passage_selector = 3,
76-
.edit_selector = 0,
75+
.passage_selector = Database_Notes::passage_selector::any_passage,
76+
.edit_selector = Database_Notes::edit_selector::at_any_time,
7777
.non_edit_selector = 0,
7878
.status_selectors = {},
7979
.assignment_selector = user,
@@ -103,8 +103,8 @@ void statistics_statistics ()
103103
.book = 0,
104104
.chapter = 0,
105105
.verse = 0,
106-
.passage_selector = 3,
107-
.edit_selector = 0,
106+
.passage_selector = Database_Notes::passage_selector::any_passage,
107+
.edit_selector = Database_Notes::edit_selector::at_any_time,
108108
.non_edit_selector = 0,
109109
.status_selectors = {},
110110
.assignment_selector = "",
@@ -124,8 +124,8 @@ void statistics_statistics ()
124124
.book = 0,
125125
.chapter = 0,
126126
.verse = 0,
127-
.passage_selector = 3,
128-
.edit_selector = 0,
127+
.passage_selector = Database_Notes::passage_selector::any_passage,
128+
.edit_selector = Database_Notes::edit_selector::at_any_time,
129129
.non_edit_selector = 1,
130130
.status_selectors = {},
131131
.assignment_selector = "",
@@ -144,8 +144,8 @@ void statistics_statistics ()
144144
.book = 0,
145145
.chapter = 0,
146146
.verse = 0,
147-
.passage_selector = 3,
148-
.edit_selector = 0,
147+
.passage_selector = Database_Notes::passage_selector::any_passage,
148+
.edit_selector = Database_Notes::edit_selector::at_any_time,
149149
.non_edit_selector = 3,
150150
.status_selectors = {},
151151
.assignment_selector = "",

0 commit comments

Comments
 (0)