From 85c5cee598fd3d87d8e015785f28c7af67f6a59a Mon Sep 17 00:00:00 2001 From: andrewlalis Date: Tue, 4 Nov 2025 17:20:49 -0500 Subject: [PATCH] Added balance time series, fixed file selector behavior. --- .../Get Account Balance Time Series.bru | 20 +++++ finnow-api/bruno-api/Finnow/collection.bru | 5 +- finnow-api/sample-data/attachments/1.txt | 1 + finnow-api/sample-data/attachments/2.jpg | Bin 0 -> 69374 bytes finnow-api/sample-data/attachments/3.png | Bin 0 -> 26839 bytes finnow-api/sample-data/categories.csv | 9 ++ finnow-api/source/account/api.d | 8 ++ finnow-api/source/account/service.d | 26 ++++++ finnow-api/source/api_mapping.d | 1 + finnow-api/source/profile/data_impl_sqlite.d | 9 +- finnow-api/source/transaction/data.d | 1 + .../source/transaction/data_impl_sqlite.d | 4 + finnow-api/source/transaction/model.d | 10 +-- finnow-api/source/util/sample_data.d | 78 +++++++++++----- web-app/package-lock.json | 32 +++++++ web-app/package.json | 3 + web-app/src/api/account.ts | 14 +++ web-app/src/api/data.ts | 4 + .../src/components/common/FileSelector.vue | 83 +++++++----------- web-app/src/pages/UserHomePage.vue | 2 + web-app/src/pages/home/AnalyticsModule.vue | 78 ++++++++++++++++ 21 files changed, 306 insertions(+), 82 deletions(-) create mode 100644 finnow-api/bruno-api/Finnow/Accounts/Get Account Balance Time Series.bru create mode 100644 finnow-api/sample-data/attachments/1.txt create mode 100644 finnow-api/sample-data/attachments/2.jpg create mode 100644 finnow-api/sample-data/attachments/3.png create mode 100644 finnow-api/sample-data/categories.csv create mode 100644 web-app/src/pages/home/AnalyticsModule.vue diff --git a/finnow-api/bruno-api/Finnow/Accounts/Get Account Balance Time Series.bru b/finnow-api/bruno-api/Finnow/Accounts/Get Account Balance Time Series.bru new file mode 100644 index 0000000..9044d05 --- /dev/null +++ b/finnow-api/bruno-api/Finnow/Accounts/Get Account Balance Time Series.bru @@ -0,0 +1,20 @@ +meta { + name: Get Account Balance Time Series + type: http + seq: 5 +} + +get { + url: {{base_url}}/profiles/:profile/accounts/:accountId/balance-time-series + body: none + auth: inherit +} + +params:path { + profile: {{current_profile}} + accountId: 1 +} + +settings { + encodeUrl: true +} diff --git a/finnow-api/bruno-api/Finnow/collection.bru b/finnow-api/bruno-api/Finnow/collection.bru index ee278de..546d827 100644 --- a/finnow-api/bruno-api/Finnow/collection.bru +++ b/finnow-api/bruno-api/Finnow/collection.bru @@ -6,6 +6,10 @@ auth:bearer { token: {{access_token}} } +vars:pre-request { + current_profile: test-profile-0 +} + script:pre-request { const axios = require("axios"); const baseUrl = bru.getEnvVar("base_url"); @@ -16,7 +20,6 @@ script:pre-request { await checkAuth(); } - net = require("net") console.log("Testing GET /me"); try { const resp = await axios.get(baseUrl + "/me", {headers: {"Authorization": "Bearer " + bru.getEnvVar("access_token")}}); diff --git a/finnow-api/sample-data/attachments/1.txt b/finnow-api/sample-data/attachments/1.txt new file mode 100644 index 0000000..449c0a7 --- /dev/null +++ b/finnow-api/sample-data/attachments/1.txt @@ -0,0 +1 @@ +This is a sample text attachment. \ No newline at end of file diff --git a/finnow-api/sample-data/attachments/2.jpg b/finnow-api/sample-data/attachments/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..15a1fdf58c4eace4a916f594b75e0883137e16da GIT binary patch literal 69374 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 literal 0 HcmV?d00001 diff --git a/finnow-api/sample-data/attachments/3.png b/finnow-api/sample-data/attachments/3.png new file mode 100644 index 0000000000000000000000000000000000000000..9cfd2514d37e337d6e0fd236837a82ca22411851 GIT binary patch literal 26839 zcmdSBby$__`!9&1f`Wud2m%5M2+}33DBUeB0@5J4Xbe&WL`qsfO1is2nng)>cgLd7 z&G&cCUvuV~nLo~)87?<_Z(+UbeV^x!Pu$P)SCA9Gdx!K68XDSNNr~4=XlU1#;Ga6o z>+m_y+$D_g&}N9fxcp&46QTN*Lh8Q2;bS=pIb z+i#)Q3ZbDrLX&*`QpG8DeZpB=M(<2`n?u%>ib3RclT3>H6ds{ehDrpzYu`I{4Tb`> z-`-xBgg@@J#XlJh<7T24x^EgH<;rn%)N<~zWnB~cLt=Aj&qGMSrBm=|+zuHRrE9lY zju5G5#l8mbb35qMCfw7ElMtpiI61wt5BdngTVG2{dE(>{4i4nYLHoI6 zJXSX_Fop&O&enY-B_-|obkx;L3k&zu`4m)D2_HUm+gt3)$*iiXQc+RaoT|N4zUzU= z6ry~O`}ONr$IWq56O(lK`t^&|;4d}?hA)S4H~iw+-)gj;xC<#uMn*<1uHy0Warm7a z^UObga43a3o0}Kr<{ImFhy#yeqN8*4YJ>19JTEVnkO>$S{O8Mm1IehUsQ&%?CtRry z_brm1n!30-QCZvf>Cc}(-@kv~N_CWyl2TSy78Cm`&xM-EK5_dw!Rx&HJ0)cyoKZbp z({onwm9T`hGu4?y}dh?jyGN)o}Xsu-0?1OJ+k89D5Mb&>Wt-8mXZ19 zuyOSc?x&0E>jL@>ULLD2rXD|j%*n--k&$6!XsBJ|HZn5e{L6J8@sx?FtFu!@O|84F z&HwAyXhBy;&-G>`a%-f}7>no`3SH|wth2MT(H9q&jJp$wlvh>`r8j1eV$rRFHJF~A zU9GJ~|G3s-ljG&(6&k8+XIB^*No;;x?Ro^u%ktz&vCF~g#hB~VYjN?tot>LEZut56 z!TTQ*(_Oo8-{wejSQ}hfTNC!YI6GJyI?pG*dGn^Yc#D3c&-tfp52<(Ws6|>wMxwY1 z@I@XzeAwRJo|>9^UTThpdCt$DZ!yBo7k9DTOEdc#HCAfvdbmC_J-xlNGc$j7Npqf+ zl@&fJ}KgTW%ms03=|H|g(=Igc~a{g4As0KrJ zN&%<5xAoUWMMe4IbX8Oa?5sIBIP_{gEZ@Cjw_omo*B%Mn{vHxCv%1RXeqztdTb`ku zW;L8g#l#d?Eb{7Aqdx&%XIGc1ib_~m7~Fwe>~lpuJ)~xua1d!@-tO)$IlrS!47cpd zm-WNLs3w1crYKiY(VKB{EqeF8zI%J$tT8b$8Qu&1f@fxBB_|<4!ebTd{!y z2ZcD_LkbHC35kh`-MMpzl$5k1k|j7Gz<`wmlL~=A@Wojf8F^ntpU}DIlgE$oFhtV& zDTUnp@XXB2l+@JJR8=i4Ese%RU%mSB`Sa)KXwsUm4w><|@Q9(1U0Nks=B1Rv9x`eD zm1OeM{P&26E@te!YxykZ2p?X2z85+j9v*JbcaGYb!@fl$ATZw4^!nvX{geF_Sow_1 z%*M5*zkf9~G@d?vYHDg~Ia;)GetML3m-g}Fo|S!Ai(I|h6BJ4&L5SRQLOww#PFMD{|KK16yP;ogt*5GLcwAguZ0tit zrbmw+J$v@;%a>PLTCQ;8goK2p)>Cp)QnnvHe6X=u8O!14=cl2jK07~`{m<9h>MCT8 z%j6B@BY|KG3yX$^hKiUQ+eb&j4y*S?B;f5|y-Lo{-&yHTE47-qgNez?&Mtx(9ubkF zQ+WtkBO)TAsi}GW`t@AhYWS&yj7*i|2C28mN^P>o;rfWrT{6g&*eg6ciMYSp101fuSK{0)ot(oS?u!avrPk zERDkLY+Bjq0f#hr^S^)pvazwj74*qEX=!Ooii=?%c6N6QEdTB4L%D)zW)l=Vhix@z z2{M}4Uj3JeNkv8$vn7NMp*@tN6A%;>&uuxn6^EVi=Z~$8jikK%P*2bIu&~bV?x3$< zrDSCT{r%yB74D}ckjZ6bPF7Z%@PG*d&bBLkDLZp5g(YxRMjoEh?ru3FqlJ@`lg>^V zVd2^zKYnbCm5z;$4h{^YXJ*R(WSxOzoSB({k_G|Mv^O|1va-H@wmtL8%F0SdM~8|k zF_J}3Q%j4Vm)Buq72#QkIzEOyO-@d>o~(iZYSX-grQ6upfI7E)!v0C9p`x_|xuuC> zbaQt%<&3VZbaiy(j+0B^wR>-8$B}=yyU@W&+SSvOmzDL6-tF`-J0t`@P^{ABfI-p3 z)KoIL_fKZ#$f&%WTxzcg+{5d(!;LYxPFB`BEST#^+v=*BhQ`QEEF!!oK|w*Bq#OS- z)h)PoaOC6oxOjLX=`Bo6{eyxw*Vmg^v&zez2eULdNiB~yC$h7%U&led8YANmjubO9 zGbsgK!s_2nd&6_|_V*|En)LSeX2s-c6#9rI6A}>}?jF~(b`A`vynLBhQ$wLA;ClEh zP%PlvH^WRdB_(PW7Gb0Iu;Jl1w4wgQ>`|RsrB?2!?N8|u2?_Gay@T0WLk{AoPmk&7 z<^mvQ;E5+Eig9pr=cK2grCy{widsc=f>MPF1_6 zrKOeHEy+RtB?W!^hAl)nnkz2oapq)fY&_c?dz*mPV!RBWDl9g3y!4h0BpZ|oc5ZG8 z0Vh`7cUD&29UWs1KcE2p&d%;?ZfDJkD=iYh4dG&Z7Bsc37jZ*Iy}Njf<>!EVCBz{`g< z@$m4r_xB%nqru%lq<+D3fs%W1ehMM8vpdu1YdxHIjp}t#&)^`yDqb9%pk(pjAX2Wc zCLd-RyixuJ>Qm=k(X9HP|NMbQ$GrA02ok)ZK?G91cB2Me>69R&tD~dR7)f!*TS-;b zNMFC+n`mWWw&_bqGT5v#M>-m)_5)d<)xE6iGu zPq}seWJBpZu^?B2ejFLOl~W8bfyQfnW1}*&2R6cd@EJ9ujgz|P&Sq(AtAtlil4yY6 zkNPhd$S97qqN1>a_mz;T7`PPM+uL~_7w3F#H;5@I<-?|x9}Er-x|=J!cu_YnP?VbL zbI|yVnK|go7xaV=TR4=IQ>n5sN=iylFZB%!lob_cwzjNIOqS>8_ZdsS-oe7^Xm2lw zkcoXB^5x4HkwgFlfyLSq5+e)wC%}_{fB**vhY|M8%CfSuZM%&5`T6v8dL5mK)1xf_k!AV$`POmzm0Uzr zUcpDc*bn*~_(=4c4?jB&i69o5788WrMKEP!pXZzB`ruMtOiVf+#TY@VGcZI$BODy` z!CPHkF7r4)`A+q!f~@dM&9U9ohkE45h|edKmT&fVS)@6>$b>AdJtBULFrGh6E-vX( z&%?uG`7%|>x?s!K;o?W~rr;TEYgLs%$r1+T>SQG%_s^d@xyOtNcLk@HmU!6MV7cpB z4&>tnpw+N(aGZu?X%o=Nsi>;TN=jyAWxW=zz!^ao6>WyU?2P8hOiH?bc}EF(B5?FC z*8}BY@NdHPn^X!kqM@OoIUYUOf$6oO+{MMktS?mCYbQq(KPVe=rxA!T7G0tDog{Af zp1Jnbp6SR&rE!SX{{H?aPoC7e9%%tfc=__Bn3xaXw%!>?7Yfpc{EikzMn;m7x5sp< zvj}@$P&#bQ^os+%nTp#3{8VYT)VpUL z4h1o>uZO;iS03ahfc@d&Vbx5vi87m4GBPsq^10TsQ9plEfQR~boES%tQ53QDWM*ZaDly<)Df|Q-z-qzuVgVle~(45TX$USyuMLj$& z!k#MEjQt7;QG{X#GzgJ#&hwDVqtMN|<`bYgZ4C`x=!9DrmJvQaKH|X?%}q^NI+YPp zDF8r#TTIospUyT1KrC)0YMk|_S65d@l1IQ-NJzQeQcz)`9q=la+*gNgKT!|dEiAIU zyj}y4?@N(BbxZw>bit1_gFD6-fyzeWlaFHnfV$NsYTo)+R@O6m`kzrz8ft2^PoK6` zFg$s(V5~(Z^bX(x zW@cs?TDwM{yG<;8`z!tUA~iKN0AU-YNwELIGJ6^gjEs(wQc|+e(+^KX7DAI14I zg{$ixj{NW);p#q)^+F! zz<)8RW`k_cNZ$hPg6!Qn>Xnj~hK+EwGe1jc>guwzwhpc(6ZSZh2-B-_+A+TTNQ_g9 zS8X#VMjLv2i0ZTvEf`b_*fRj^iHV7TQ=!@?iv^ybb_}GX?tH0#Q)(3#74<-|e|%g3 z-j0K#A7G=Tr0H@`VtILaU|=9T+lKR-p)ZhnJlx!e+k|M)lK??t+`9D_;zg?zXKNc4 ztg)eCJ2w+}<0j-D-0Z=@0YG?&J2yAC`ucht9Gs=@IB6LfSU1A^_uURwRdsda!@}-g zFvWZlH1qln>jQ$pn>TOZugl6%L%Djuv?|n2ml8ao=+esk{Pp|yz$@k3w{Js;ql#Yw zR|0UG4H#^!WCQ3R>Vc%AWL=jk^Bz<*3ly$b*u@)a7P z-G>hrVm!9b){U?WKn0IcD7eaou~uVkw=#ebXu5D~7t7n8<9a(shuYfO-3h|hZ{I3t zYr8G9htJNwgCAoNGv~Q;1xTgD^EsG7*jESs9Tp|0*%Rn^&Ou{lT>(b3Vs0Gf(zB_-P!)pN=!DnP~&a^9T> zV2^#P@!!9Lv*W#{<6SfgE)fY45o&5`5gna#sC)kY{*cDYCpv~+3Mwl1ef0O1kXwmQ z&#cA)q`kAUU+j#sv9SptVuJ1>0fkpijzZ97f3n(j$MySdpi$bDj!eSBp6}kh1Jwri zGM+(L_;S454qpUFO?4H{abx2{ws$v#j{e0cCZ?q=0T$HJ)&~3uL3LFaA|k|6lt3V& zBqQtK-pWl&BYyB8BP~r`Pw#TMHyM_|+IkBe17|vv&XZ71u6ug=t-QQEfV%zt{rP!A z0Db|)Eb#1y8zM>m{is&28Cw9`^nFFjVGTHzo=^Adl?q>_CP=usS2Y z@TI$?{lIk(4XyRYV(~S!k1~(`fBe0^wjT0s#ok3$w(AArHyvmtQ5?o{hyZl+?pR(B z5YQ*EdKhERtG|G{)!Nz$014{1QpP}AC>V%byb%40cYV#v+XgV_cLKFDO(`QQ zL(s4l50np_psfS~P-&W4TIPa57zh_N(B0KlTv!+*;Jh2bq$L(edH^~jRKdrzw6Oep#Gyd}0n)EudnF`Xs*|pu zYiVhn*(E_|g1Z>bH@HH4Y;3^2JB_t)CFE0c!Fj}BqFLuYBGRn%v3q(0+fBw>X z>-^{F)>JJhh3E5ap~1i_ownarDFC^eoV$@5Dxz9~7@P!&^6Q;DrPxD`kL$ zg_;B8Gh1kSadBbKCkU_wlGmOuPA&~}n0x1E;|UQFYJhpf#W8A72W#q3jX>puHyj-v z7H~u1Q4I_Zily}vKYQ~L4_IVU{|dyL#d$qqV{_Bv^5PsW4v`Gt6q}_MSo`OjSRjVl z+uK)FS3^Ya>{e9pfo==v22>>31R)(oMVsT@g)7v8@g5+o1M6iWFDfk^;OB>lKQiS2-3rnJAR7Te zC@g=%bDQg)CBVnU)A~n}cq%`L9m}_GUs%Nd`0>utG8b{tEDED~<1-skZ)ARG=)vi1u>DIiwzZ4I5AP`_SYbqQb?tdD%rD*E*@V0n9nho9TbHt7x$ zgU)mB-t62QBspZ(Mk56*1Hf=nV&bL6MW0A7Z*S<(z>cPs{{dG8Sxf-bfRK=0D0Dle zD}MMiF2fVhBY-jZ`Oo?I+|tw26BieM7f1XNAU%?|Ue_-8xtGD`~! zC`CEC)nDbs<)YX{0lNu$t_EL6PBB{)pkC=$a=hD)n zA5WyWi@}-#rQW!@0x0zxkOkG$20IQxhw606-U6!uTpTEaul>P-OG=srS=ImE8P7G4 z#{%&BhKA^J9tA$+wH?mW2itVT$Q;^4Q}`P&2cYOeYteP2pz@Nxa}xt2_#y8u+`n>~ zoS^MI=0zU}JPwYI%-Ut&)4}S4kneVR1ndWpFlrVm+s@K)B|pIQx;fmmq$H7jjwery zpx-FCe<05vXT<8{`cLnl38G^(8e#nF!q$!qC8;70aqj@B!sHhd?aKxKtI@?#bW>tQdCS#OLH?oA5I<~Xg5O>6V;W~ z_8W9;;@S|;jk*9p9Doab=RBkYNdBhB zZBMK->dLUN0q}N?wx%Em^B~a! z-^?#ACg-+*s4gh59WS$a9S2n`-wHY=&$PgG7XbUVl6$3iT)m3S;zWf`Xl9H%xe0rt9o`Q7b<>duJ*c5K*rC@AK z7uqHxD+|5(EaR5V#Kf!57|dfCw=dYn$v~s%Xlv7FG<5g4apOjb1tf7t1Q1Z*+9}eJ z@GiujjUQ`Y3QxW&a5*po2VK7r(8aAm+go3HC-}bsaD>&ft^^kXkPAp(j5}7`P{R;g z6l2yb*J>+J%9UU*E-o!y>L4&KT+9W9bx?lss^AScJM(%-2g9|(rJz?*uZ;qs96W(? z+?*@= z_W$yQhJoQL5G=5tY@R`N_xAEiN>28dE2yEj2≠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 X^sk}M3_8g0NUd15`sW0_?SB6S#YZAN literal 0 HcmV?d00001 diff --git a/finnow-api/sample-data/categories.csv b/finnow-api/sample-data/categories.csv new file mode 100644 index 0000000..1743ca7 --- /dev/null +++ b/finnow-api/sample-data/categories.csv @@ -0,0 +1,9 @@ +Food,#8ceb34,Anything food-related., +Groceries,#26c92c,Groceries for home-cooked meals.,Food +Restaurants,#bfd166,Restaurants and fast food meals., +Travel,#453ddb,"Cars, transit, and airfare.", +Health,#db3d6f,Personal healthcare., +Home,#f59e11,Home maintenance and upkeep., +Income,#20ab16,Any source of income., +Salary,#16ab40,Regular income from a salary.,Income +Interest,#8b16ab,Income from account interest.,Income diff --git a/finnow-api/source/account/api.d b/finnow-api/source/account/api.d index 781a1f3..15e485b 100644 --- a/finnow-api/source/account/api.d +++ b/finnow-api/source/account/api.d @@ -138,6 +138,14 @@ void handleGetTotalBalances(ref ServerHttpRequest request, ref ServerHttpRespons writeJsonBody(response, balances); } +void handleGetAccountBalanceTimeSeries(ref ServerHttpRequest request, ref ServerHttpResponse response) { + auto ds = getProfileDataSource(request); + ulong accountId = request.getPathParamOrThrow!ulong("accountId"); + int timeZoneOffset = request.getParamAs!int("time-zone-offset", 0); + auto series = getBalanceTimeSeries(ds, accountId, timeZoneOffset); + writeJsonBody(response, series); +} + // Value records: const PageRequest VALUE_RECORD_DEFAULT_PAGE_REQUEST = PageRequest(1, 10, [Sort("timestamp", SortDir.DESC)]); diff --git a/finnow-api/source/account/service.d b/finnow-api/source/account/service.d index 605fc3e..531cb56 100644 --- a/finnow-api/source/account/service.d +++ b/finnow-api/source/account/service.d @@ -77,7 +77,33 @@ CurrencyBalance[] getTotalBalanceForAllAccounts(ProfileDataSource ds, SysTime ti } } return balances; +} +struct BalanceTimeSeriesPoint { + long balance; + string timestamp; +} + +BalanceTimeSeriesPoint[] getBalanceTimeSeries(ProfileDataSource ds, ulong accountId, int timeZoneOffsetMinutes) { + BalanceTimeSeriesPoint[] points; + immutable TimeZone tz = new immutable SimpleTimeZone(minutes(timeZoneOffsetMinutes)); + SysTime now = Clock.currTime(tz); + SysTime endOfToday = SysTime( + DateTime(now.year, now.month, now.day, 23, 59, 59), + tz + ); + SysTime timestamp = endOfToday.toOtherTZ(UTC()); + for (int i = 0; i < 30; i++) { + auto balance = getBalance(ds, accountId, timestamp); + if (!balance.isNull) { + points ~= BalanceTimeSeriesPoint( + balance.value, + timestamp.toISOExtString() + ); + } + timestamp = timestamp - days(1); + } + return points; } /** diff --git a/finnow-api/source/api_mapping.d b/finnow-api/source/api_mapping.d index 9f6301b..0ceee9a 100644 --- a/finnow-api/source/api_mapping.d +++ b/finnow-api/source/api_mapping.d @@ -66,6 +66,7 @@ HttpRequestHandler mapApiHandlers(string webOrigin) { a.map(HttpMethod.GET, ACCOUNT_PATH ~ "/value-records/:valueRecordId:ulong", &handleGetValueRecord); a.map(HttpMethod.POST, ACCOUNT_PATH ~ "/value-records", &handleCreateValueRecord); a.map(HttpMethod.DELETE, ACCOUNT_PATH ~ "/value-records/:valueRecordId:ulong", &handleDeleteValueRecord); + a.map(HttpMethod.GET, ACCOUNT_PATH ~ "/balance-time-series", &handleGetAccountBalanceTimeSeries); import transaction.api; // Transaction vendor endpoints: diff --git a/finnow-api/source/profile/data_impl_sqlite.d b/finnow-api/source/profile/data_impl_sqlite.d index 60d8848..494e200 100644 --- a/finnow-api/source/profile/data_impl_sqlite.d +++ b/finnow-api/source/profile/data_impl_sqlite.d @@ -39,12 +39,10 @@ class FileSystemProfileRepository : ProfileRepository { if (!exists(getProfilesDir())) mkdir(getProfilesDir()); ProfileDataSource ds = new SqliteProfileDataSource(path); import std.datetime; - import std.conv; auto propsRepo = ds.getPropertiesRepository(); propsRepo.setProperty("name", name); propsRepo.setProperty("createdAt", Clock.currTime(UTC()).toISOExtString()); propsRepo.setProperty("user", username); - propsRepo.setProperty("database-schema-version", SCHEMA_VERSION.to!string()); return new Profile(name); } @@ -137,6 +135,7 @@ class SqlitePropertiesRepository : PropertiesRepository { private const SCHEMA = import("sql/schema.sql"); private const uint SCHEMA_VERSION = 1; +private const SCHEMA_VERSION_PROPERTY = "database-schema-version"; /** * An SQLite implementation of the ProfileDataSource that uses a single @@ -160,8 +159,12 @@ class SqliteProfileDataSource : ProfileDataSource { this.db = Database(path); db.run("PRAGMA foreign_keys = ON"); if (needsInit) { - infoF!"Initializing database: %s"(dbPath); + infoF!"Initializing database: %s with schema version %d."(dbPath, SCHEMA_VERSION); db.run(SCHEMA); + // Set the schema version property right away: + import std.conv; + auto propRepo = new SqlitePropertiesRepository(db); + propRepo.setProperty(SCHEMA_VERSION_PROPERTY, SCHEMA_VERSION.to!string); } migrateSchema(); } diff --git a/finnow-api/source/transaction/data.d b/finnow-api/source/transaction/data.d index 53b63ed..f98e045 100644 --- a/finnow-api/source/transaction/data.d +++ b/finnow-api/source/transaction/data.d @@ -20,6 +20,7 @@ interface TransactionVendorRepository { interface TransactionCategoryRepository { Optional!TransactionCategory findById(ulong id); + Optional!TransactionCategory findByName(string name); bool existsById(ulong id); bool existsByName(string name); TransactionCategory[] findAll(); diff --git a/finnow-api/source/transaction/data_impl_sqlite.d b/finnow-api/source/transaction/data_impl_sqlite.d index 711ef67..30b38f6 100644 --- a/finnow-api/source/transaction/data_impl_sqlite.d +++ b/finnow-api/source/transaction/data_impl_sqlite.d @@ -81,6 +81,10 @@ class SqliteTransactionCategoryRepository : TransactionCategoryRepository { return util.sqlite.findById(db, "transaction_category", &parseCategory, id); } + Optional!TransactionCategory findByName(string name) { + return util.sqlite.findOne(db, "SELECT * FROM transaction_category WHERE name = ?", &parseCategory, name); + } + bool existsById(ulong id) { return util.sqlite.exists(db, "SELECT id FROM transaction_category WHERE id = ?", id); } diff --git a/finnow-api/source/transaction/model.d b/finnow-api/source/transaction/model.d index f69e111..11c9513 100644 --- a/finnow-api/source/transaction/model.d +++ b/finnow-api/source/transaction/model.d @@ -12,11 +12,11 @@ struct TransactionVendor { } struct TransactionCategory { - immutable ulong id; - immutable Optional!ulong parentId; - immutable string name; - immutable string description; - immutable string color; + ulong id; + Optional!ulong parentId; + string name; + string description; + string color; } struct Transaction { diff --git a/finnow-api/source/util/sample_data.d b/finnow-api/source/util/sample_data.d index 8bb2f4f..a44e0b1 100644 --- a/finnow-api/source/util/sample_data.d +++ b/finnow-api/source/util/sample_data.d @@ -1,7 +1,7 @@ module util.sample_data; import slf4d; -import handy_http_primitives : Optional; +import handy_http_primitives : Optional, mapIfPresent; import auth; import profile; @@ -46,7 +46,7 @@ void generateRandomUser(int idx, UserRepository userRepo) { infoF!"Generating random user %s, password: %s."(username, password); User user = createNewUser(userRepo, username, password); ProfileRepository profileRepo = new FileSystemProfileRepository(username); - const int profileCount = uniform(1, 5); + const int profileCount = uniform(1, 3); for (int i = 0; i < profileCount; i++) { generateRandomProfile(i, profileRepo); } @@ -59,16 +59,16 @@ void generateRandomProfile(int idx, ProfileRepository profileRepo) { ProfileDataSource ds = profileRepo.getDataSource(profile); ds.getPropertiesRepository().setProperty("sample-data-idx", idx.to!string); - Currency preferredCurrency = choice(ALL_CURRENCIES); + Currency preferredCurrency = Currencies.USD; - const int accountCount = uniform(3, 10); + const int accountCount = uniform(3, 8); for (int i = 0; i < accountCount; i++) { generateRandomAccount(i, ds, preferredCurrency); } ds.doTransaction(() { generateVendors(ds); - generateCategories(ds.getTransactionCategoryRepository(), Optional!ulong.empty); + generateCategories(ds); }); generateRandomTransactions(ds); } @@ -81,31 +81,27 @@ void generateVendors(ProfileDataSource ds) { vendorRepo.insert(record[0], record[1]); vendorCount++; } - infoF!" Generated %d random vendors."(vendorCount); + infoF!" Generated %d vendors."(vendorCount); } -void generateCategories(TransactionCategoryRepository repo, Optional!ulong parentId, size_t depth = 0) { - const int categoryCount = uniform(5, 10); - for (int i = 0; i < categoryCount; i++) { - string name = "Test Category " ~ to!string(i); - if (parentId) { - name ~= " (child of " ~ parentId.value.to!string ~ ")"; - } - TransactionCategory category = repo.insert( - parentId, - name, - "Testing category.", - "FFFFFF" - ); - infoF!" Generating child categories for %d, depth = %d"(i, depth); - if (depth < 2) { - generateCategories(repo, Optional!ulong.of(category.id), depth + 1); +void generateCategories(ProfileDataSource ds) { + auto categoryRepo = ds.getTransactionCategoryRepository(); + string categoriesCsv = readText("sample-data/categories.csv"); + uint categoryCount = 0; + foreach (record; csvReader!(Tuple!(string, string, string, string))(categoriesCsv)) { + string parentName = record[3]; + Optional!ulong parentId = Optional!ulong.empty; + if (parentName !is null && parentName.length > 0) { + parentId = categoryRepo.findByName(parentName).mapIfPresent!(c => c.id); } + categoryRepo.insert(parentId, record[0], record[2], record[1][1..$]); } + infoF!" Generated %d categories."(categoryCount); } void generateRandomAccount(int idx, ProfileDataSource ds, Currency preferredCurrency) { AccountRepository accountRepo = ds.getAccountRepository(); + AccountValueRecordRepository valueRecordRepo = ds.getAccountValueRecordRepository(); string idxStr = idx.to!string; string numberSuffix = "0".replicate(4 - idxStr.length) ~ idxStr; string name = "Test Account " ~ idxStr; @@ -122,6 +118,16 @@ void generateRandomAccount(int idx, ProfileDataSource ds, Currency preferredCurr currency, description ); + long balance = uniform(-1_000_000, 1_000_000); + ulong accountAge = uniform(5, 365*10); + SysTime accountOpenedAt = Clock.currTime(UTC()) - days(accountAge); + valueRecordRepo.insert( + accountOpenedAt, + account.id, + AccountValueRecordType.BALANCE, + balance, + account.currency + ); infoF!" Generated random account: %s, #%s, %s"(name, numberSuffix, currency.code); } @@ -202,7 +208,33 @@ void generateRandomTransactions(ProfileDataSource ds) { } } - auto txn = addTransaction(ds, data, []); + // Add attachments: + MultipartFile[] attachments; + if (uniform01 < 0.5) { + for (int k = 0; k < uniform(1, 3); k++) { + if (k == 0) { + attachments ~= MultipartFile( + "1.txt", + "text/plain", + cast(ubyte[]) std.file.read("sample-data/attachments/1.txt") + ); + } else if (k == 1) { + attachments ~= MultipartFile( + "2.jpg", + "image/jpg", + cast(ubyte[]) std.file.read("sample-data/attachments/2.jpg") + ); + } else if (k == 2) { + attachments ~= MultipartFile( + "3.png", + "image/png", + cast(ubyte[]) std.file.read("sample-data/attachments/3.png") + ); + } + } + } + + auto txn = addTransaction(ds, data, attachments); infoF!" Generated transaction %d"(txn.id); timestamp -= seconds(uniform(10, 1_000_000)); } diff --git a/web-app/package-lock.json b/web-app/package-lock.json index d97ead4..59910ac 100644 --- a/web-app/package-lock.json +++ b/web-app/package-lock.json @@ -14,6 +14,9 @@ "@fortawesome/vue-fontawesome": "^3.1.2", "@idle-observer/vue3": "^0.2.0", "chart.js": "^4.5.1", + "chartjs-adapter-date-fns": "^3.0.0", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", "pinia": "^3.0.3", "vue": "^3.5.18", "vue-chartjs": "^5.3.2", @@ -2618,6 +2621,16 @@ "pnpm": ">=8" } }, + "node_modules/chartjs-adapter-date-fns": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", + "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", + "license": "MIT", + "peerDependencies": { + "chart.js": ">=2.8.0", + "date-fns": ">=2.0.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2701,6 +2714,25 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-tz": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", + "license": "MIT", + "peerDependencies": { + "date-fns": "^3.0.0 || ^4.0.0" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", diff --git a/web-app/package.json b/web-app/package.json index 121c955..db3d5ce 100644 --- a/web-app/package.json +++ b/web-app/package.json @@ -22,6 +22,9 @@ "@fortawesome/vue-fontawesome": "^3.1.2", "@idle-observer/vue3": "^0.2.0", "chart.js": "^4.5.1", + "chartjs-adapter-date-fns": "^3.0.0", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", "pinia": "^3.0.3", "vue": "^3.5.18", "vue-chartjs": "^5.3.2", diff --git a/web-app/src/api/account.ts b/web-app/src/api/account.ts index ea54543..9daf77f 100644 --- a/web-app/src/api/account.ts +++ b/web-app/src/api/account.ts @@ -143,6 +143,11 @@ export interface CurrencyBalance { balance: number } +export interface BalanceTimeSeriesPoint { + balance: number + timestamp: string +} + export class AccountApiClient extends ApiClient { readonly path: string readonly profileName: string @@ -189,6 +194,15 @@ export class AccountApiClient extends ApiClient { return super.getJson(`/profiles/${this.profileName}/account-balances`) } + getBalanceTimeSeries( + accountId: number, + timeZoneOffsetMinutes: number, + ): Promise { + return super.getJson( + `/profiles/${this.profileName}/accounts/${accountId}/balance-time-series?time-zone-offset=${timeZoneOffsetMinutes}`, + ) + } + getValueRecords(accountId: number, pageRequest: PageRequest): Promise> { return super.getJsonPage(this.path + '/' + accountId + '/value-records', pageRequest) } diff --git a/web-app/src/api/data.ts b/web-app/src/api/data.ts index 2fb6501..c0152b9 100644 --- a/web-app/src/api/data.ts +++ b/web-app/src/api/data.ts @@ -31,3 +31,7 @@ export function formatMoney(amount: number, currency: Currency) { export function floatMoneyToInteger(amount: number, currency: Currency) { return Math.round(amount * Math.pow(10, currency.fractionalDigits ?? 0)) } + +export function integerMoneyToFloat(amount: number, currency: Currency) { + return amount / Math.pow(10, currency.fractionalDigits ?? 0) +} diff --git a/web-app/src/components/common/FileSelector.vue b/web-app/src/components/common/FileSelector.vue index 09a1113..83584fa 100644 --- a/web-app/src/components/common/FileSelector.vue +++ b/web-app/src/components/common/FileSelector.vue @@ -1,5 +1,5 @@