-
Notifications
You must be signed in to change notification settings - Fork 2
/
db-notes
246 lines (179 loc) · 6.95 KB
/
db-notes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
dependent: :destroy
ASSOCIATION TYPES
belongs_to /// ie: book belongs_to :author
one-to-one (one book has one author) unless otherwise specified by has_many
colon singular word (:author not :authors)
has_one /// ie: user has_one :climber_profile
one-to-one (climber profile belongs to climber)
specifies ownership
colon singular word
has_many /// ie: author has many books
one-to-many (one author has many books)
colon plural word (:books not book)
has_many :through
has_one :through
has_and_belongs_to_many
//////////////////////////////////////////////////
/// USER ///
//////////////////////////////////////////////////
rails g model user first_name:string last_name:string email:string emergency_contact:string emergency_phone:string address1:string address2:string city:string state:string zip:string phone:string birthdate:date age:integer membership_status:enum
rails g model user_role role:string description:string
:USER
first_name string /// Stormpath
last_name string /// Stormpath
email string /// Stormpath
emergency_contact string
emergency_phone string
address1 string
address2 string
city string
state string /// From dropdown?
zip string /// Use zip to find city and state?
phone string
birthdate date
age integer /// Calculated based on birthdate
membership_status boolean
has_many :climb_applications
has_many :climbs /// Only if user has certain user types
has_and_belongs_to_many :user_types
has_one :climber_profile
has_one :hiker_profile
has_one :climb_leader_profile
:USER_TYPES
name string
description string
has_and_belongs_to_many :users /// Takes place of users_types join table
//////////////////////////////////////////////////
/// PROFILES ///
//////////////////////////////////////////////////
CLIMBER_PROFILE
belongs_to user_id
has_many climber_history
has_many climber_education through user?
bio text
mazamas_volunteer text
physical_activity text
physical_condition text
medical_condition text
medication text
rails g ClimberExperience mountain:string route:string climb_leader:string role:string month:integer year:integer
CLIMBER_EXPERIENCE
belongs_to user_id
has_one mountain
has_one route
has_one user_id (climb_leader)
role string
month integer
year integer
rails g model EducationProgram abbreviation:string name:string description:string
education
name string
description string
rails g ClimberEducation year:integer leader:string
*** CLIMBER_EDUCATION *** JOIN!
belongs_to user_id
has_one education
year string
has_one user_id (climb_leader)
HIKER_PROFILE
belongs_to user_id
rails g model ClimbLeaderProfile climbing_since:integer leader_since:integer pace:integer climb_preferences:text volunteer_history:text climb_achievements:text climb_philsophy:text summit_treat:text profile:text
CLIMB_LEADER_PROFILE
belongs_to user_id
climbing_since string
leader_since date?
pace integer
climb_preference text
mazamas_volunteer text
climb_achievement text
philosophy text
summit_treat text
profile text
//////////////////////////////////////////////////
/// CLIMBS ///
//////////////////////////////////////////////////
rails g model climb_climb_app application_date:date
CLIMB_APPLICATION
belongs_to user_id
belongs_to climb_id
application_date date?
enum submitted accepted rejected waitlist leader assistant
rails g model climb description:text party_size:integer spots_available:integer last_updated:datetime
CLIMB
has_many climb_climb_app
has_and_belongs_to_many climb_grads
has_and_belongs_to_many climb_restrictions
belongs_to climb_schedule
has_one specific_dates
has_one general_dates
description text
party_size integer
spots_available integer // based on climbers accepted
last_updated datetime
status enum // open full waitlist cancelled
rails generate migration CreateJoinTableStudentTeacher student teacher
rails g model climb_schedule season:string date:integer
rails g model specific_date date_leave_town:date date_leave_trailhead:date date_summit:date date_return_trailhead:date date_return_town:date
SPECIFIC_DATES (TYPICALLY SUMMER)
belongs_to climb
leave_town_date date
leave_trailhead_date date
summit_date date
return_trailhead_date date
return_town_date date
rails g model general_dates climb_year:integer description:text
GENERAL_DATES (TYPICALLY WINTER)
belongs_to climb
climb_month string
description text
rails g model climb_class code:string description:string
CLIMB_CLASS
code string
description string
rails g model climb_grad_emphasis code:string description:string
CLIMB_GRAD_EMPHASIS
code string
description string
rails g model climb_tag code:string description:string
CLIMB_TAG
code string
description string
rails g model mountain name:string peak_coordinates:string
MOUNTAIN
name string
peak_coordinates string
rails g model route name:string description:string trailhead_coordinates:string
ROUTE
name string
description string
trailhead_coordinates string
PROSPECTUS
belongs_to climb
//////////////////////////////////////////////////
/// HIKES ///
//////////////////////////////////////////////////
HIKE
name string
description string
trailhead_coordinates string
hike_leader user_id
has_one hike_class
has_one hike_level
has_one hike_type
has_many hike_applications
HIKE_CLASS /// A B C D Q
name string
description string
HIKE_LEVEL /// 1 1.5 2 2.5 3 3.5
name string
description string
HIKE_TYPE
name string
description string
HIKE_APPLICATION /// Hike Snowshoe SnowBiv Conditioning Backpack CarCamp Ramble
has_one user_id
has_one hike_id
accepted boolean
rejected boolean
waitlisted boolean
Payments