diff --git a/PureGym/Dto.fs b/PureGym/Dto.fs index a377f67..175cb97 100644 --- a/PureGym/Dto.fs +++ b/PureGym/Dto.fs @@ -60,6 +60,7 @@ type GymAddress = /// E.g. "LONDON" [] Town : string + /// Never seen this in the wild, sorry County : string option /// E.g. "SW9 6DE" [] @@ -167,8 +168,11 @@ type Member = Postcode : string /// E.g. "Corporate" MembershipName : string + /// No idea what this is MembershipLevel : int + /// No idea what this is SuspendedReason : int + /// No idea what this is MemberStatus : int } @@ -187,6 +191,8 @@ type GymAttendance = TotalPeopleInClasses : int /// E.g. " or fewer" TotalPeopleSuffix : string option + /// Whether the number of people in the gym is approximate. This appears to become true when the number + /// of people in the gym is small enough (e.g. in Oval the threshold is 10). [] IsApproximate : bool /// When the query was received (I think) @@ -269,6 +275,7 @@ type MemberActivityDto = LastRefreshed = this.LastRefreshed } +/// Aggregation of visits made to some particular gym in some defined time period. [] type SessionsAggregate = { @@ -336,14 +343,18 @@ type SessionsSummary = ThisWeek : SessionsAggregate } + /// Human-readable non-round-trippable representation override this.ToString () = $"%i{this.Total.Visits} visits, totalling %i{this.Total.Duration} minutes" +/// Information about a particular user's visits to a particular gym. [] type Sessions = { + /// Aggregated summary over some time period. [] Summary : SessionsSummary + /// List of all individual visits made within some time period. [] Visits : Visit list } diff --git a/PureGym/SurfaceBaseline.txt b/PureGym/SurfaceBaseline.txt index b54b704..97f0ba3 100644 --- a/PureGym/SurfaceBaseline.txt +++ b/PureGym/SurfaceBaseline.txt @@ -151,12 +151,12 @@ PureGym.GymSelector.Tag [property]: [read-only] int PureGym.GymSelectorModule inherit obj PureGym.GymSelectorModule.canonicalId [static method]: PureGym.IPureGymApi -> PureGym.GymSelector -> int System.Threading.Tasks.Task PureGym.IPureGymApi - interface with 6 member(s) -PureGym.IPureGymApi.GetGym [method]: int -> PureGym.Gym System.Threading.Tasks.Task -PureGym.IPureGymApi.GetGymAttendance [method]: int -> PureGym.GymAttendance System.Threading.Tasks.Task -PureGym.IPureGymApi.GetGyms [method]: unit -> PureGym.Gym list System.Threading.Tasks.Task -PureGym.IPureGymApi.GetMember [method]: unit -> PureGym.Member System.Threading.Tasks.Task -PureGym.IPureGymApi.GetMemberActivity [method]: unit -> PureGym.MemberActivityDto System.Threading.Tasks.Task -PureGym.IPureGymApi.GetSessions [method]: System.DateTime -> System.DateTime -> PureGym.Sessions System.Threading.Tasks.Task +PureGym.IPureGymApi.GetGym [method]: (int, System.Threading.CancellationToken option) -> PureGym.Gym System.Threading.Tasks.Task +PureGym.IPureGymApi.GetGymAttendance [method]: (int, System.Threading.CancellationToken option) -> PureGym.GymAttendance System.Threading.Tasks.Task +PureGym.IPureGymApi.GetGyms [method]: System.Threading.CancellationToken option -> PureGym.Gym list System.Threading.Tasks.Task +PureGym.IPureGymApi.GetMember [method]: System.Threading.CancellationToken option -> PureGym.Member System.Threading.Tasks.Task +PureGym.IPureGymApi.GetMemberActivity [method]: System.Threading.CancellationToken option -> PureGym.MemberActivityDto System.Threading.Tasks.Task +PureGym.IPureGymApi.GetSessions [method]: (System.DateOnly, System.DateOnly, System.Threading.CancellationToken option) -> PureGym.Sessions System.Threading.Tasks.Task PureGym.Member inherit obj, implements PureGym.Member System.IEquatable, System.Collections.IStructuralEquatable, PureGym.Member System.IComparable, System.IComparable, System.Collections.IStructuralComparable PureGym.Member..ctor [constructor]: (int, string, string, string, int, string, string, string, System.DateOnly, string, string, string, int, int, int) PureGym.Member.CompoundMemberId [property]: [read-only] string @@ -222,6 +222,8 @@ PureGym.MemberActivityThisMonth.TotalDurationMinutes [property]: [read-only] int PureGym.MemberActivityThisMonth.TotalVisits [property]: [read-only] int PureGym.MemberModule inherit obj PureGym.MemberModule.jsonParse [static method]: System.Text.Json.Nodes.JsonNode -> PureGym.Member +PureGym.PureGymApiModule inherit obj +PureGym.PureGymApiModule.make [static method]: System.Net.Http.HttpClient -> PureGym.IPureGymApi PureGym.Sessions inherit obj, implements PureGym.Sessions System.IEquatable, System.Collections.IStructuralEquatable, PureGym.Sessions System.IComparable, System.IComparable, System.Collections.IStructuralComparable PureGym.Sessions..ctor [constructor]: (PureGym.SessionsSummary, PureGym.Visit list) PureGym.Sessions.get_Summary [method]: unit -> PureGym.SessionsSummary diff --git a/PureGym/version.json b/PureGym/version.json index f3c770d..d0e7d61 100644 --- a/PureGym/version.json +++ b/PureGym/version.json @@ -1,5 +1,5 @@ { - "version": "3.0", + "version": "4.0", "publicReleaseRefSpec": [ "^refs/heads/main$" ], diff --git a/flake.lock b/flake.lock index 2e18027..e0fb3ff 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1694529238, - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", "owner": "numtide", "repo": "flake-utils", - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1696981262, - "narHash": "sha256-YaCOjdqhbjBeyMjxlgFWt4XD/b9pGKWURgS3uEwNLtc=", + "lastModified": 1703792911, + "narHash": "sha256-BzCq3IiOlTghYtgPngIUnJDeGlRdz4RJGyS9faONrOE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a2b87a4f66f309d2f4b789fd0457f5fc5db0a9a6", + "rev": "1d17e304ac93dde75178d7ad47abbecc0357c937", "type": "github" }, "original": { diff --git a/nix/deps.nix b/nix/deps.nix index 9de6832..72339e6 100644 --- a/nix/deps.nix +++ b/nix/deps.nix @@ -48,8 +48,8 @@ }) (fetchNuGet { pname = "FSharp.Core"; - version = "8.0.100-beta.23418.2"; - sha256 = "05wfbfqphk27qp1v8pmssl3fhs4yggyrmzvxwcx6m3xryix7bjkk"; + version = "8.0.100"; + sha256 = "06z3vg8yj7i83x6gmnzl2lka1bp4hzc07h6mrydpilxswnmy2a0l"; }) (fetchNuGet { pname = "FsUnit"; @@ -58,58 +58,58 @@ }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Ref"; - version = "6.0.22"; - sha256 = "0fqpl1fr213b4fb3c6xw3fy6669yxqcp1bzcnayw80yrskw8lpxs"; + version = "6.0.25"; + sha256 = "1vrmqn5j6ibwkqasbf7x7n4w5jdclnz3giymiwvym2wa0y5zc59q"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64"; - version = "6.0.22"; - sha256 = "1xvqqc7bzj764g3scp0saqxlfiv866crgi8chz57vhjp9sgd61jw"; + version = "6.0.25"; + sha256 = "0mgcs4si7mwd0f555s1vg17pf4nqfaijd1pci359l1pgrmv70rrg"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64"; - version = "8.0.0-rc.1.23421.29"; - sha256 = "1sz6skh1ddvdcib8ydi6km593ah3cchgz2fs61kj03z6jg2vz9la"; + version = "8.0.0"; + sha256 = "05y1xb5fw8lzvb4si77a5qwfwfz1855crqbphrwky6x9llivbhkx"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; - version = "6.0.22"; - sha256 = "1gcv99y295fnhy12fyx8wqvbhbj6mz8p5bm66ppwdxb3zykjg2l8"; + version = "6.0.25"; + sha256 = "0wvzhqhlmlbnpa18qp8m3wcrlcgj3ckvp3iv2n7g8vb60c3238aq"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; - version = "8.0.0-rc.1.23421.29"; - sha256 = "1m6a47bnrl8n9ahnh01mg2fkc20lmfjjg3f7xzbdngnikm6vzcxv"; + version = "8.0.0"; + sha256 = "18zdbcb2bn7wy1dp14z5jyqiiwr9rkad1lcb158r5ikjfq1rg5iw"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-arm64"; - version = "6.0.22"; - sha256 = "1ib0x1w33wqy7lgzjf14dvgx981xpjffjqd800d7wgxisgmakrmr"; + version = "6.0.25"; + sha256 = "1pywgvb8ck1d5aadmijd5s3z6yclchd9pa6dsahijmm55ibplx36"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-arm64"; - version = "8.0.0-rc.1.23421.29"; - sha256 = "16vy79c7byrqwd9f7vm0xbah3k4y6yis0flm9jkfk0hp4bb0y0js"; + version = "8.0.0"; + sha256 = "1nbxzmj6cnccylxis67c54c0ik38ma4rwdvgg6sxd6r04219maqm"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-x64"; - version = "6.0.22"; - sha256 = "026r38a7by7wdfd3virjdaah3y2sjjmnabgf5l25vdnwpwc7c31d"; + version = "6.0.25"; + sha256 = "1zlf0w7i6r02719dv3nw4jy14sa0rs53i89an5alz5qmywdy3f1d"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-x64"; - version = "8.0.0-rc.1.23421.29"; - sha256 = "0ygb60mpk1rkz67v1d9vf3f7zfvdzg5a4ckc1yqcfb2n4a64rdbv"; + version = "8.0.0"; + sha256 = "1wqkbjd1ywv9w397l7rsb89mijc5n0hv7jq9h09xfz6wn9qsp152"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.win-x64"; - version = "6.0.22"; - sha256 = "0ygdqsd312kqpykwb0k2942n45q1w3yn1nia6m1ahf7b74926qb5"; + version = "6.0.25"; + sha256 = "1fbsnm4056cpd4avgpi5sq05m1yd9k4x229ckxpr4q7yc94sncwy"; }) (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.win-x64"; - version = "8.0.0-rc.1.23421.29"; - sha256 = "0cir3vy94ki9v0zzkm49f33mxmp25i2v0c3gp4fhmnhpsfn0x7rb"; + version = "8.0.0"; + sha256 = "08vlmswmiyp2nxlr9d77716hk7kz7h9x5bl8wh76xzbj5id1xlb2"; }) (fetchNuGet { pname = "Microsoft.CodeCoverage"; @@ -123,103 +123,103 @@ }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-arm64"; - version = "6.0.22"; - sha256 = "0gri1gqznm5c8fsb6spqb3j88a3b0br0iy50y66fh4hz9wc4fwzm"; + version = "6.0.25"; + sha256 = "052388yjivzkfllkss0nljbzmjx787jqdjsbb6ls855sp6wh9xfd"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-arm64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "1254rvx06wjblf0y2msh1zdg0fky861l8x5f5w7hm5l14ys1firb"; + version = "8.0.0"; + sha256 = "0bpg3v9dnalz7yh7lsgriw9rnm9jx37mqhhvf7snznb3sfk7rgwb"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-x64"; - version = "6.0.22"; - sha256 = "0k1i74wn6j7nq0bd8m6jrpl65wda6qc9pglppvz4ybk0n2ab1rbi"; + version = "6.0.25"; + sha256 = "103xy6kncjwbbchfnpqvsjpjy92x3dralcg9pw939jp0dwggwarz"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-x64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "10kjms0wx5iialcvd0fp64vriv4cyk7k22wqh3km9mh43i620px7"; + version = "8.0.0"; + sha256 = "1c7l68bm05d94x5wk1y33mnd4v8m196vyprgrzqnh94yrqy6fkf7"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-arm64"; - version = "6.0.22"; - sha256 = "0166gwarhhnary19lf80ff33bkx00mkm24f17bc8j6v7g3a7zvq6"; + version = "6.0.25"; + sha256 = "13m14pdx5xfxky07xgxf6hjd7g9l4k6k40wvp9znhvn27pa0wdxv"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-x64"; - version = "6.0.22"; - sha256 = "038bjwk201p2kzs3jflrkhlnszf7cwalafq0nvs2v8bp7jlnx5ib"; + version = "6.0.25"; + sha256 = "132pgjhv42mqzx4007sd59bkds0fwsv5xaz07y2yffbn3lzr228k"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-x64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "03sgkb2ar63wllisx8rmpc3yrngl61yhlmqinwbc5bhyaxpmqnk5"; + version = "8.0.0"; + sha256 = "0jmzf58vv45j0hqlxq8yalpjwi328vp2mjr3h0pdg0qr143iivnr"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.win-x64"; - version = "6.0.22"; - sha256 = "1bjy3zmrmaq97xp0f3nzs3ax330ji632avrfpg8xz4vc5p8s1xpc"; + version = "6.0.25"; + sha256 = "039433rm4w37h9qri11v3lrpddpz7zcly9kq8vmk6w1ixzlqwf01"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Host.win-x64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "0lnxq6risl59ig9svhra6papn0i9rs2pr4zgnysnbfg7gvd3fiwh"; + version = "8.0.0"; + sha256 = "1n8yr13df2f6jhxpfazs6rxahfqm18fhjvfm16g5d60c3za1hwnk"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Ref"; - version = "6.0.22"; - sha256 = "0km8184kma8kgz7iyl3j6apj1n7vskzdhzmq3myy3y36ysqrb4wf"; + version = "6.0.25"; + sha256 = "0jfhmfxpx1h4f3axgf60gc8d4cnlvbb853400kag6nk0875hr0x1"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-arm64"; - version = "6.0.22"; - sha256 = "01gbl9dgky4h7ijxryz3527l39v23lkcvk4fs4w91ra4pris2n8p"; + version = "6.0.25"; + sha256 = "0jpcmva1l8z36r4phz055l7fz9s6z8pv8pqc4ia69mhhgvr0ks7y"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-arm64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "1x5pq1y4gn1gwnqmq9mj02wki5yncidlnmaf2przz8yingfw0hq6"; + version = "8.0.0"; + sha256 = "0gwqmkmr7jy3sjh9gha82amlry41gp8nwswy2iqfw54f28db63n7"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; - version = "6.0.22"; - sha256 = "09gfqdxbh36bjx20fw9k94b9qa9bwffhrq0ldwn834mx31bgrfs8"; + version = "6.0.25"; + sha256 = "012jml0bqxbspahf1j4bvvd91pz85hsbcyhq00gxczcazhxpkhz4"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "1arzm0mqdj0hnlsfcki8z3zbbp5mpv73133wc8yxpymh6f000bv2"; + version = "8.0.0"; + sha256 = "042cjvnwrrjs3mw5q8q5kinh0cwkks33i3n1vyifaid2jbr3wlc0"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-arm64"; - version = "6.0.22"; - sha256 = "1x7wclv93q8wp7rip5nwnsxbqcami92yilvzbp0yn42ddkw177ds"; + version = "6.0.25"; + sha256 = "0wgwxpyy1n550sw7npjg69zpxknwn0ay30m2qybvqb5mj857qzxi"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-arm64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "04k93say7b842bvh2x853skj5ymxsq3b11vf6rkfcqz6b7hvn7pj"; + version = "8.0.0"; + sha256 = "06ndp4wh1cap01dql3nixka4g56bf6ipmqys7xaxvg4xisf79x8d"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-x64"; - version = "6.0.22"; - sha256 = "1sq1ygsrpv2sl85wrs8382wgkjic0zylaj1y8kcvhczcmkpk3wr5"; + version = "6.0.25"; + sha256 = "08vr7c5bg5x3w35l54z1azif7ysfc2yiyz50ip1dl0mpqywvlswr"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-x64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "0f403j2sis8p7y1w2nkbp03xq8qq06f7q94d8clm9c98vppw75sj"; + version = "8.0.0"; + sha256 = "1kh5bnaf6h9mr4swcalrp304625frjiw6mlz1052rxwzsdq98a96"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.win-x64"; - version = "6.0.22"; - sha256 = "1nn254xv1hi5c4rg38fbfkln3031vv545lv9f4df31i8c1yfzz24"; + version = "6.0.25"; + sha256 = "03snpmx204xvc9668riisvvdjjgdqhwj7yjp85w5lh8j8ygrqkif"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.win-x64"; - version = "8.0.0-rc.1.23419.4"; - sha256 = "00whfl9s9qd43jv68rff5g6da0k6y11yc2pg6v681967fnq31jqp"; + version = "8.0.0"; + sha256 = "054icf5jjnwnswrnv1r05x3pfjvacbz6g3dj8caar1zp53k49rkk"; }) (fetchNuGet { pname = "Microsoft.NETCore.Platforms";