Search, Paging, and "As of" Date #10
| @ -64,7 +64,7 @@ type AppDbContext with | ||||
|   member this.CountMembersForSmallGroup gId = | ||||
|     this.Members.CountAsync (fun m -> m.smallGroupId = gId) | ||||
| 
 | ||||
|   (*-- PRAYER REQUEST EXTENSIONS *) | ||||
|   (*-- PRAYER REQUEST EXTENSIONS --*) | ||||
| 
 | ||||
|   /// Get a prayer request by its Id | ||||
|   member this.TryRequestById reqId = | ||||
| @ -108,6 +108,27 @@ type AppDbContext with | ||||
|   member this.CountRequestsByChurch cId = | ||||
|     this.PrayerRequests.CountAsync (fun pr -> pr.smallGroup.churchId = cId) | ||||
| 
 | ||||
|   /// Get all (or active) requests for a small group as of now or the specified date | ||||
|   member this.SearchRequestsForSmallGroup (grp : SmallGroup) (searchTerm : string) pageNbr : PrayerRequest seq = | ||||
|     let skip = (pageNbr - 1) * 100 | ||||
|     upcast ( | ||||
|       this.PrayerRequests | ||||
|         .AsNoTracking() | ||||
|         .Where(fun pr -> pr.smallGroupId = grp.smallGroupId && pr.text.Contains(searchTerm.ToLowerInvariant())) | ||||
|       |> function | ||||
|       // Sort | ||||
|       | query when grp.preferences.requestSort = "D" -> | ||||
|           query.OrderByDescending(fun pr -> pr.updatedDate) | ||||
|               .ThenByDescending(fun pr -> pr.enteredDate) | ||||
|               .ThenBy(fun pr -> pr.requestor) | ||||
|       | query -> | ||||
|           query.OrderBy(fun pr -> pr.requestor) | ||||
|               .ThenByDescending(fun pr -> pr.updatedDate) | ||||
|               .ThenByDescending(fun pr -> pr.enteredDate) | ||||
|       |> function | ||||
|       // Pagination | ||||
|       | query -> query.Skip(skip).Take(100)) | ||||
| 
 | ||||
|   (*-- SMALL GROUP EXTENSIONS --*) | ||||
| 
 | ||||
|   /// Find a small group by its Id | ||||
|  | ||||
| @ -156,6 +156,8 @@ and [<CLIMutable; NoComparison; NoEquality>] ListPreferences = | ||||
|     timeZoneId          : TimeZoneId | ||||
|     /// The time zone information | ||||
|     timeZone            : TimeZone | ||||
|     /// The number of requests displayed per page | ||||
|     pageSize            : int | ||||
|     } | ||||
|   with | ||||
|     /// A set of preferences with their default values | ||||
| @ -177,6 +179,7 @@ and [<CLIMutable; NoComparison; NoEquality>] ListPreferences = | ||||
|         isPublic            = false | ||||
|         timeZoneId          = "America/Denver" | ||||
|         timeZone            = TimeZone.empty | ||||
|         pageSize            = 100 | ||||
|       } | ||||
|     /// Configure EF for this entity | ||||
|     static member internal configureEF (mb : ModelBuilder) = | ||||
| @ -188,78 +191,83 @@ and [<CLIMutable; NoComparison; NoEquality>] ListPreferences = | ||||
|           m.Property(fun e -> e.daysToKeepNew) | ||||
|             .HasColumnName("DaysToKeepNew") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue(7) | ||||
|             .HasDefaultValue 7 | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.daysToExpire) | ||||
|             .HasColumnName("DaysToExpire") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue(14) | ||||
|             .HasDefaultValue 14 | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.longTermUpdateWeeks) | ||||
|             .HasColumnName("LongTermUpdateWeeks") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue(4) | ||||
|             .HasDefaultValue 4 | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.emailFromName) | ||||
|             .HasColumnName("EmailFromName") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue("PrayerTracker") | ||||
|             .HasDefaultValue "PrayerTracker" | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.emailFromAddress) | ||||
|             .HasColumnName("EmailFromAddress") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue("prayer@djs-consulting.com") | ||||
|             .HasDefaultValue "prayer@djs-consulting.com" | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.listFonts) | ||||
|             .HasColumnName("ListFonts") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue("Century Gothic,Tahoma,Luxi Sans,sans-serif") | ||||
|             .HasDefaultValue "Century Gothic,Tahoma,Luxi Sans,sans-serif" | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.headingColor) | ||||
|             .HasColumnName("HeadingColor") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue("maroon") | ||||
|             .HasDefaultValue "maroon" | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.lineColor) | ||||
|             .HasColumnName("LineColor") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue("navy") | ||||
|             .HasDefaultValue "navy" | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.headingFontSize) | ||||
|             .HasColumnName("HeadingFontSize") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue(16) | ||||
|             .HasDefaultValue 16 | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.textFontSize) | ||||
|             .HasColumnName("TextFontSize") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue(12) | ||||
|             .HasDefaultValue 12 | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.requestSort) | ||||
|             .HasColumnName("RequestSort") | ||||
|             .IsRequired() | ||||
|             .HasMaxLength(1) | ||||
|             .HasDefaultValue("D") | ||||
|             .HasDefaultValue "D" | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.groupPassword) | ||||
|             .HasColumnName("GroupPassword") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue("") | ||||
|             .HasDefaultValue "" | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.defaultEmailType) | ||||
|             .HasColumnName("DefaultEmailType") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue(EmailType.Html) | ||||
|             .HasDefaultValue EmailType.Html | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.isPublic) | ||||
|             .HasColumnName("IsPublic") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue(false) | ||||
|             .HasDefaultValue false | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.timeZoneId) | ||||
|             .HasColumnName("TimeZoneId") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue("America/Denver") | ||||
|             .HasDefaultValue "America/Denver" | ||||
|           |> ignore | ||||
|           m.Property(fun e -> e.pageSize) | ||||
|             .HasColumnName("PageSize") | ||||
|             .IsRequired() | ||||
|             .HasDefaultValue 100 | ||||
|           |> ignore) | ||||
|       |> ignore | ||||
| 
 | ||||
|  | ||||
| @ -37,6 +37,7 @@ type ListPreferencesTable = | ||||
|     requestSort         : OperationBuilder<AddColumnOperation> | ||||
|     textFontSize        : OperationBuilder<AddColumnOperation> | ||||
|     timeZoneId          : OperationBuilder<AddColumnOperation> | ||||
|     pageSize            : OperationBuilder<AddColumnOperation> | ||||
|     } | ||||
| 
 | ||||
| type MemberTable = | ||||
| @ -174,22 +175,23 @@ type InitialDatabase () = | ||||
|       schema  = "pt", | ||||
|       columns = | ||||
|         (fun table -> | ||||
|             { smallGroupId        = table.Column<Guid>   (name = "SmallGroupId", nullable = false) | ||||
|               daysToExpire        = table.Column<int>    (name = "DaysToExpire", nullable = false, defaultValue = 14) | ||||
|               daysToKeepNew       = table.Column<int>    (name = "DaysToKeepNew", nullable = false, defaultValue = 7) | ||||
|               defaultEmailType    = table.Column<string> (name = "DefaultEmailType", nullable = false, defaultValue = "Html") | ||||
|               emailFromAddress    = table.Column<string> (name = "EmailFromAddress", nullable = false, defaultValue = "prayer@djs-consulting.com") | ||||
|               emailFromName       = table.Column<string> (name = "EmailFromName", nullable = false, defaultValue = "PrayerTracker") | ||||
|               groupPassword       = table.Column<string> (name = "GroupPassword", nullable = false, defaultValue = "") | ||||
|               headingColor        = table.Column<string> (name = "HeadingColor", nullable = false, defaultValue = "maroon") | ||||
|               headingFontSize     = table.Column<int>    (name = "HeadingFontSize", nullable = false, defaultValue = 16) | ||||
|               isPublic            = table.Column<bool>   (name = "IsPublic", nullable = false, defaultValue = false) | ||||
|               lineColor           = table.Column<string> (name = "LineColor", nullable = false, defaultValue = "navy") | ||||
|               listFonts           = table.Column<string> (name = "ListFonts", nullable = false, defaultValue = "Century Gothic,Tahoma,Luxi Sans,sans-serif") | ||||
|             { smallGroupId        = table.Column<Guid>   (name = "SmallGroupId",        nullable = false) | ||||
|               daysToExpire        = table.Column<int>    (name = "DaysToExpire",        nullable = false, defaultValue = 14) | ||||
|               daysToKeepNew       = table.Column<int>    (name = "DaysToKeepNew",       nullable = false, defaultValue = 7) | ||||
|               defaultEmailType    = table.Column<string> (name = "DefaultEmailType",    nullable = false, defaultValue = "Html") | ||||
|               emailFromAddress    = table.Column<string> (name = "EmailFromAddress",    nullable = false, defaultValue = "prayer@djs-consulting.com") | ||||
|               emailFromName       = table.Column<string> (name = "EmailFromName",       nullable = false, defaultValue = "PrayerTracker") | ||||
|               groupPassword       = table.Column<string> (name = "GroupPassword",       nullable = false, defaultValue = "") | ||||
|               headingColor        = table.Column<string> (name = "HeadingColor",        nullable = false, defaultValue = "maroon") | ||||
|               headingFontSize     = table.Column<int>    (name = "HeadingFontSize",     nullable = false, defaultValue = 16) | ||||
|               isPublic            = table.Column<bool>   (name = "IsPublic",            nullable = false, defaultValue = false) | ||||
|               lineColor           = table.Column<string> (name = "LineColor",           nullable = false, defaultValue = "navy") | ||||
|               listFonts           = table.Column<string> (name = "ListFonts",           nullable = false, defaultValue = "Century Gothic,Tahoma,Luxi Sans,sans-serif") | ||||
|               longTermUpdateWeeks = table.Column<int>    (name = "LongTermUpdateWeeks", nullable = false, defaultValue = 4) | ||||
|               requestSort         = table.Column<string> (name = "RequestSort", maxLength = Nullable<int> 1, nullable = false, defaultValue = "D") | ||||
|               textFontSize        = table.Column<int>    (name = "TextFontSize", nullable = false, defaultValue = 12) | ||||
|               timeZoneId          = table.Column<string> (name = "TimeZoneId", nullable = false, defaultValue = "America/Denver") | ||||
|               requestSort         = table.Column<string> (name = "RequestSort",         nullable = false, defaultValue = "D", maxLength = Nullable<int> 1) | ||||
|               textFontSize        = table.Column<int>    (name = "TextFontSize",        nullable = false, defaultValue = 12) | ||||
|               timeZoneId          = table.Column<string> (name = "TimeZoneId",          nullable = false, defaultValue = "America/Denver") | ||||
|               pageSize            = table.Column<int>    (name = "PageSize",            nullable = false, defaultValue = 100) | ||||
|               }), | ||||
|       constraints = | ||||
|         fun table -> | ||||
|  | ||||
| @ -49,6 +49,7 @@ type AppDbContextModelSnapshot () = | ||||
|           b.Property<string>("requestSort").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("D").HasMaxLength(1)  |> ignore | ||||
|           b.Property<int>("textFontSize").ValueGeneratedOnAdd().HasDefaultValue(12) |> ignore | ||||
|           b.Property<string>("timeZoneId").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("America/Denver") |> ignore | ||||
|           b.Property<int>("pageSize").IsRequired().ValueGeneratedOnAdd().HasDefaultValue(100) |> ignore | ||||
|           b.HasKey("smallGroupId") |> ignore | ||||
|           b.HasIndex("timeZoneId") |> ignore | ||||
|           b.ToTable("ListPreference") |> ignore) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user