From cd6e660a7dcb357bbb315a38815496a53b47edac Mon Sep 17 00:00:00 2001
From: Flatlogic Bot
Date: Thu, 5 Jun 2025 17:20:23 +0000
Subject: [PATCH] 1
---
.gitignore | 5 ++
app-shell/src/_schema.json | 5 +-
backend/src/db/api/tasks.js | 14 +++++
backend/src/db/migrations/1749136812314.js | 52 +++++++++++++++++++
backend/src/db/models/tasks.js | 7 +++
.../db/seeders/20231127130745-sample-data.js | 35 ++++++++++++-
backend/src/routes/tasks.js | 11 ++++
backend/src/services/tasks.js | 25 +++++++++
frontend/src/components/Tasks/CardTasks.tsx | 11 ++++
frontend/src/components/Tasks/ListTasks.tsx | 7 +++
.../components/Tasks/configureTasksCols.tsx | 14 +++++
.../components/WebPageComponents/Header.tsx | 2 +-
frontend/src/pages/dashboard.tsx | 5 ++
frontend/src/pages/tasks/[tasksId].tsx | 10 ++++
frontend/src/pages/tasks/tasks-edit.tsx | 10 ++++
frontend/src/pages/tasks/tasks-new.tsx | 10 ++++
frontend/src/pages/tasks/tasks-view.tsx | 8 +++
frontend/src/pages/users/users-view.tsx | 6 +++
18 files changed, 232 insertions(+), 5 deletions(-)
create mode 100644 backend/src/db/migrations/1749136812314.js
diff --git a/.gitignore b/.gitignore
index e427ff3..d0eb167 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
node_modules/
*/node_modules/
*/build/
+
+**/node_modules/
+**/build/
+.DS_Store
+.env
\ No newline at end of file
diff --git a/app-shell/src/_schema.json b/app-shell/src/_schema.json
index 48b75a4..1b6862d 100644
--- a/app-shell/src/_schema.json
+++ b/app-shell/src/_schema.json
@@ -1,5 +1,4 @@
-
-
{
+ "1": "{\"iv\":\"p9T6joIozKmeS5xP\",\"encryptedData\":\"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\"}",
"Initial version": "{\"iv\":\"134zCPgbZrEW03pJ\",\"encryptedData\":\"+zVaN9Arqs7AsXYQg46yqLEwALY0HJH7dBrmyO/JF2oNH2sHkPEZEy9Smd7U1aMDhwQikT7RfwX1DSQDs5A9eFpNgOAx0i38AxlfxC+CzNivKvXsEpwQmgtmJkm5lBW3+2canR8/sSKmMnW5A8+eyBqbIMlLoru4+AFLGYyZB4ttptfwdrMGh5qfkX7UZzpA2TB2N7hANhBRPY5DYBZnOZ84S5F3jm7p1+/3COuISiYHoBm41Bftb8M/6OOJSYQAzF6d2gTS0ozt1rbWdx/jq6KKpESDu1eX2mrLv2sY0x3HKz0IOl/bssSZ4hC3Q3JZHDaIiqGox1BgTCFhty6jdk/C/hF6QoaabCtMnWsbrDwwko3A+C3oZ+QqDBDiP8wzLORZYF86fYDajOPZuYZM1UrqChJklTAoZ9XLCajw4xC0MjVea3enhGbJ5mMRtxvdfs13P9d8oV8x8XoLxUdJUTz6lWgQCi7Ovckx1/zYQ+1MZ7iaPu1a4/8ZDkQcw+uMBVsiyUKDDCPKQQJByh1DYS3fkxt29u3G/w3iTEb5pxdMUrhkA8OCQc4utxhiL1Bn99gM6yI6fGP9w66Y4aP15P4rEl8Ondkt5ZYYzhQM0hQO+PU6A5Mm4Ngmf+hjlY1rI4JcLfdllHq4hEW20rTmP1zDhDM2oTlqBMKu6DnrRfZWtBeLdm1/v04BeEOUQhy8A/UzFUd6b66Pj5dxFoGvj/KUSfu38SQAxUs8q1nmtPhbtebqLJ/ptSw8d0XQaBcv+GYWhj483+DKkLarADEnPalVXd+xWIS4yEfis5+LPhUZO0EyugBaGfsO23buFeLqtig1FXdu8l3IFEVG7MddRlOViGETGVMpageCBI18POrci2qBUDwvf29Xs5dx4AD/+srZbVXAPnXgvKTwbXDSg1C2pSRemSND0dWNdFEOrRl1gijWqruJqcbDt1xmdWrrOjIITYvj9TPkO8jVTTPHWNRefhwq+0drYg6ymq1G8IjiV0SH3DLKITBovz1vn8wxEAvOFyNmmSalXFy+a+xKu7xzyj49vH7YV7YbHXFR33fhXuIgFqBo6psHZz7hEIwOzrmADc9AtyReVFjEcYfaQ53GrCzK93+Vnp+iF/cyZKjCPdm6ft63W/PDdxAYnnpwIaLvfinKQQuGQLXpEAlzX0cBVWKLENMemZsWD3KE2qG4GMD2Z2cmhleVAVACXLYzxGb/f8pTA7RFsqfp/x8rdR7oaYtwey6ZMblFugbGQ8bxzCAqqGyO6gPfpjrbnrrTwgKQIg3hLIfM+XNlPgxM7985kwry+MHFmCsVgNHzZt2V0e+vcobookpu5MVXaqOKkqW26Pup2qUPfBEcemd4rIKN76MbXtabh3DgIwSuFCVpBKcLusnL71ka7bgC4rZSdBD0w703ROHjjYta1bW1eMitbwNxloY3e3Am/HrW+K0uU6yrjgl2L10VUpGWupzYyD/C5MrFjngK7An+O2Zabz68hY6xpQqOo4rKdcKaF6pmqSCwd4xlWuN2e4ZEm+Ub0cnqtnw2NFCK72C2PpC5bNUh7RJyfnanhwCSpl4svjYs+eFsaHQRhQJ5L+8JlvFOxz6RlQYhXqFLiPnpk/D1xi7r23CLXctaY6PhPD/DUW+F7dVkzBm8EMw5zFe63/ciQI7hQ8Gx6JL7D9wdpn8yz34bsFXkFiTvlRafogQIjdnQsx2RMfAWvkXtDdOH9CDQm6dHgQ2/njpEjgp1CzRVE/owuIj7Idy/b8wg5l1UWHcDj5/b/EwcxsY/ewF3SuPUKGM2d4FZ2yhsAUIIbEZzize2tx/1qEqELPXIOsnxVdDwLbMhoZ+D1cOmttONCFWiQOCTQZTv7lpuNiVkMY/q4O1S679IssrawF0O+5b1mWqhgPjO1Xk6V+Of2fP2jAbb1ebLFuOBPSBY08nzhT1gfOkG1/drDQrN8XU7LS1vG+oLQDmguEDhhd1+UOmnqDrhAWE5wnUJReUtmTRan6JGLQOX/Y+99dwQp7nyES4t4MJv1XlppOdIjWH5F5sK7mG/EnV3M0ATSj5R1zvga3bEgXGCxxCfdl4W+oOeX3KXMzJpXquUfY/6AHf5LSu42y+e+HpbYKw5KGkvRLKjTdYq5GmNvn5Zr2mdi/nxHlNe3lgwRP0ZjwElRCWg6jQthLWefMC3BZCnK6VCR80M7VWetk+0y5ADx7pbndYvZ06M+S3xKwAU8gcr4iKS7C77mho5Ln4sD7q/egNE7e8fpt5ScPCqkY5dW46Mk4Ibq/mvEYHuzYDYkRl+7qIdSj1olNXHKQH78ROJPJ4gLeMHJH8VOGZlWjlka3Jk6t4Ou40iY0vbquhp2I05vh2BO/106aBRD4melD0wbsgDUkk8YrXVx00EH5RhZgmmzfwtBdpjCIgcPlAVJebkqxxO3PNOATKW/7MdskbhRC2ZzNOmcUWM24bRLiOLByK+X5G39+V3clcMZyquXN5VvTq1VUz8Zo89eehd+gOpf+XgRFsHerkWpBYadolMtGE+kAZLg1sM5fGnyuYQQgt6hcMaRdUdjUgylLb0Z8fx3GrfSUxWVuvSl8rLbi2gLbV+e1recu302tzYp/0T/Q8CvvIxPG2iNQBYQ0vYLor0+6rUGeQ3TLnLKcN+fsRcoW5Q3awcIfKOWd2aYV4aBdezJhqMYOG8szhEblvp6jw+WvnUqbt+GZGPlwlNK8D4yIBi6FY+dM8Y5XTJzgPAHuN37l1kWnnXKL6ZWgwqLrkJzOCvaH/IVMcXe51BtZddkxOdjBruflP0zAzEF1O00KeTDDohnGds1tZWIdjTVwArx6mHJnf2x3P5U87T2uIid/ouM57Mk4UYFcpwcKyU5P4SS5KlFTK9wQunpHwEoVlkOg1akms1bhEc511pZaOJQ0m1ltMwkT9fXTZekx6C//aKmXWHvhaZ/ADVorXDKaSjlar4Y1CtWhy7SThUye3bvOoCA50/xo3Fa5Jp9+fS75fmMT4oNDR8GM0Y+6iQjejWtM8Uh6rKubPrFZLGb4XIVcwxgFGoPgw79CybS/46+EjKDiA5OTOvdlMigUgkVV0/E/7+t+BSXdxlCOMYrUXPASpPBrjugpw5/9uL0kvgVWvaRR1+7zTTP6qFmtSdhSGgL1SZHG6TaWZulyT57HKf6/ufvqNshYPeQexnz2IVoVTv3Hjja02NgHbjkQ3ZR7VpsSZao2pEoJSDRrWCkX9nRykkhoBmsqFlVac5YFicDEWoUATiMZIWKRDa2ntdsrZ+wDm/Ew21gDx1yhvMNxInZKpINx5mQos8qZwIpXnu1EM6q9EITQPwHWb+RYzMenNHgHUAmR7qALjmpHtYzhyAt3zs8kEbPn9AQAeFi4C4BqN2CcGgCIqnXgNbf2GiHqczaitXasR/in11lj+bi+4n/X/LOnkxyofzxNA0zjmsZDbMZ67F9KJOcCNtncWkqrhmyW9bDEM9C6/3hxqih82efekmhQoSCnHXflnltB4foTbrNUT3/9Rk96zFHX/jGRGdbvP4Jz7ELIjdna2HcCjmXtSweO8Si10xIZfMRh+P3y3KPfgKFOoiFjYSE8Js8vT27u6G6rQozcJQlb6rPdfJSOIUci6bf3EbfTzcw0cA8ZTsFJ1OyUnuUmtO767AupiEt6iCRlIsl9OF2AHSNLJc0W8Xy0IGYNnyWFGb0kx4e/WshfNmCcUqaiwZLdeOUaxlewuaDwXmY1Oou/6OeZenZBqXqdSONjgsjCHQycA7w2B2sZJPPv960LPUQeqcTB2s5fT9kk4sMCAV5V+lsEozKc6n1Ltoh50NihfTYMkDEqMGbYEgx7rx8VtZTbM7pHFvOG1Da0WArqHkiiW4R7z74l5B4VQqtbzMKOXZRHA+YqFasSikLB7/akaGvjY1kKvgzVLygHzml/zDyCbUOaeLRt8wEZufx0jMHpzXeJtFWIeWCaImuz3ySf1HkBcSM8RGrZVkfuxOOyvdNFApYPFqmB1UiRxoIsaz+PIVNggwCiQTKaS42ORyr00oANo2vFBwmbQ9kGlSLEolG3YZGyVbLxSk3wAWtDUvmr/bgFbRAjVBwXQ0/HwaQ27l1kkVBYRQ/vSHUK1KjGgYyBJ6vSpzYqPNjmZWeeCUr02AtRRUCzwsVHrzx1jzAWBjYfwAtJuJ4g0J/vt+S+pXgUGwEpS2AI8sP3FnLs3plwP1+qo2uqRjCaTUy0/lailA0nL3HZvBOX9dOfDUkMlmw1mFByPW6cb3OePDS9PLmrbLvpv0jYUvBRza01xV4njX3KbEpDwkqufQvhpgBOrHynzK/NZUTQrpstWZpfZ05/DYCuZQgIZB6mXLBo/jUeYYOhTZC/kEBu7JY1xyVVu1i7apaRQoCGi3/WwA1DBmNrtibCxgZia96g1m6JMuE1LFgNBlUqVRDySb+oZ2EIqywwjL6stLyzw1JOEVdtZOs1bbrMjXNousmZ3Oy8mwClNWy4Euq0/aofRUmAEh4mYhi6CqgMgcbwK2822plSo6ju6J4lFPbN3Hyyv+XhgrZB6ZWk3pcuQGOXl9slvMKp1z+Xu+5CQeRHq91GS77jvsRcKRN0FfP7WYBiqX3i3K8KLoV/lcd5r9b1MWb8iXcNSH8iU/+gRgC6OgqlSzXVPpwnMfgk4piO5Ryur7h2CjZK5UNfODdiqgN/ld8WyqyqDyxHMHxWhpvBUyRa8kJkQXJ6q80cFcyx7RetMeJOXIfwGwHaiHE5tTKirJzaYfS6itIWK74uUVTYNefrWO92DGMMgEAS/Z6LBM5aDfEd7M2IpgZ7jp0e+AdB9O4bU+zO86dWm7WDUKlr/e0kj1IuvqLi85dRSiCcKLkcv/lIjoK2xFEfjFC1lzRynFH9+esgdKqnwggD8Ptx0I25ELqp88l95/M+pK4qcUtcEnCR9x3K/XHJMHsWBD0b99RpQvJH2aoCaQoi2G0mV900deO5WF/1ldpQgNY+K7g8mYC+nLat2hnzBxomvtpmhPQVU9aSfzu9LTKcgtDEwkUBsZ/ianwCoSC8gvku7JRHjdWyRHAc8NmB2Ht9K+eHi7uGRks8cHDqtNkdlG5NFxjq6Ynzkm+shn/J4wu0IhQr6Mp/QqehLI/b4qrhAJjWzbLYsbsa52IR5ipUpY4wBfC1K9hWCMnq2HpucznqnWAccgu60Je0kThoKvkANwMAx592LdLMCwc/qSRD2loW0oqz5y17aRCXQ+QlQ7yw7H1aPEUDCrVUSwqsltMSHLsVu9y6alLPgxEXfPvZiN4gbRu2JytDrtbmBT9Ae3Ob/+5WXLUSqM5SmqNkNII8TLBNt31jq5Av5fDWyhhWZljxVWyGP1UDrzMv40LXwT+AdstDzlaS9xkCpEK4BZgGX3IMW09fxshddPn2JeIN0RIEZW6ksbrK0of+WA/drmg9O+ZptCqaCARooar5KCAy1j2jvsAeUK6I4HPLSXZ6yQ348lqOxRO2kBCkMO4qYBw3YU5ZUEQdVUBHoXUvY10zU5OjvOv9Ka4AjDH13XxFNsMvPDgHWhpmfAiuWodMBhU8VK114eeWb1cktutLlLsvwlQOI4QDJyYWWQWcja0lbceZ0xDVqUydH0hmNCHbro0h008InEXjVyMWjLwkY1wa8Xs8kHIhldeWOIozpB0TNB9L4RWk3jMOepvOm0HDFlscbo7XkJmg/ojkoVLV/CsD1h5ui843QjDqConHge/Bi8lNbDvjmHmFPw/44wuh+5FdIZRBJ/6A0U90jHNYYzWP8korwrsRoxGDEx2yOuGNmjku5ZLJhAeAAYzmeBVtppKcbWpND9Fver3uqDj6J3dmF3Pd11pWPXK3Vq3d4/UTHNS6KuevxqcCFCcXT0yS0uorcvGaUmKVJq0M9py0rI2O8LASaaUUdKPYzYE7ScIcfL1Ks1knY1GHW7Wtcw2VzzcWD+7Ss38jS8wNKlCvXGnt4ylR5kRfcldDtHmUupFPWWUaxy7lZofmcxcoRrCxchgcUfQxlJ97FHeZjn/YA6jmrI+h+z/HQZnAyA9WKW6yNG0/2r7/W4jyP1XyIEmWRJbtCZ/+ZqMdEgh/DK/m8IDNboVIoH5aKu/CtuO5YlxzbERDRO8SQ52NqzkKjaeGaQtYzjb9RVM7C7+EtA5R21i8V/2pVCj/NX7tEDstHC70afbAgO0r5/vicAOQrH3/3krzeW9P5kyaImo8eCRC3LDiwJ8EiTpVhYgRQy/egxAFYI/UCfIsisHeE2SmwQHE/bkQIsSZxFzvuNj4VpCLu8Ths1mkbjYEVpYw1u8+eKn/PjkomXZEr4fJKf8hpPfmeixEdO/PeiaUqZyegRlUDqaE9s8eqZN3jtbp2Pdw8BoXUAxihJ2pCGKsjuZ5dSeGtmeJ2a8w7NCMvpSyJi3Lh+W5uZ6EdiYggT7ieVLWeTTwFqek13z5bJ8Wn5pFC0O3mQO1TxEboXQ7qeSCK7DLPyOWs4UZFtkkbloHAhuCxtZ4XhjvdTeHFIFiqS0/trV1VWjiJzZPgBZnvHJ8yyjPeB8pAo6fVn0IvJWDSX86iWPjk4s72VgfzlsfLlV8SF/MkRq01KniCYHHf1OvF2t6NOF7sGbZvKuV1AElPVkWmywnDOXahOr35eUqKtfHwEEneVoorTCl7kp6MKYSzdhyLZsy90N8o2FUAf+dOh6O2p+q5tewbxVEriNSdHfvGG8nc49nsquQRxS14cJK6pfDeBqu1uQ5UehBsMu3fjZK2TSx4yzacxvKYSwycd3w/2eoyQSiGcq/PtwU3/Jvz3XThTqs5iOCdb0tA/pMIbpzm5TvLxt7eLvaSOSBVo+8z6oYcXVfUMmfhmJCoHLnqMJkNxKlFmvsfqHPy12sl1nruqOt1dKKIhWzF8NokKPbs4tZRD4clLrdUeNOu6GxLldB96Auj20f4LaDCZ8m60NnKWi6UbcMKxlJcKl+A74Fdqvy0BXufuSQNeUfwHceCCDIyBDdgrNQwxjPsQyCkkwXue4XmUwJy2rd2UWQtlz+QdAKHVEmiHvl0ZqusAeyC85HCDCPOJbNKuZF187PxMMK3UnJ5obAWuDIizJoEBGuMbPDbklgyFBdd2TDrALyDKwKWqIwpmLaM1/oBgW03UA51PfZl7bzf7QamMXVFA9L3wt+cHF7LDSI0TmQHDw6JhWr3PqgMyZQ4bpxT/xcjHxc1AoLHiYMCUJpIT7GvYGHtOqJL/HyXhlBkNLuVzIgwiWIYuAX/FulZOrEbqodzSrt3HYqEQcIpS1Gi3hZaJLaJZ9ym5sJdgh988zCUPz7JObIianpmgfOwnFSMxOkc5FD6FHMeCDExAHTRTM5BqX6gNOlvXrYUK4o/cRDmvHcIrHQ3BC+UgPM+vsG+0pDAF0r8CysOVy6AzRzQvkP468fH4KYQHuFs0iXjvUSSI2jjEpPzmQY2ccQGyyVaGKHrWSRFEekpA6X2a2WlpZRb0K9YU/z3A6z2y4bi/o8qWcaPsPJIy14AnW/WQhI1gD8jCnlatzhDnNZjWDuESyE3WAawwYSeEL3xADdH/YfJnaAKd8/wTLI/cG0Ez32awipV2RN2ow7dRVyplXLsx4TL8JVaPCkb/v6Wnta8S8DT8cdu3cu3AtLhvSAbFN4OFxLPpo2E4VPDaAMZSyZoeRSHUcKmRgBdG4VX9AeiQfzi7XUz0NlMh4dw5IirxjZsVKT65Fno34I5gd1V2If/mL5Ij6Hwwqn9n8oQEYPpPpTXL9+FRMuiH3WECnmPaIiDPd6WzAFNM7LdreDx/jbnzJh6s+F9hgn8h/fB4K6bT8Nxo3hkFORaUey9HqUaf7BbjXrfQoZapesjG99gKgScBqDxjtSJ1qTpZ7IS8PP/H8uoJ4HCU34GYGVSni8ZotGGvn2TzMBPPzslrkRMdpaZiyQrs6AG/iGTJ2G2WrekixaIcyGEQePy4nddLZTyTPjxZdwYsTQ08Y0W4Yy+Q48rLZlSMXwWQw9EqIzONsDpG0dqYjJi461wmVryGIdiuUMyVOLx3vgAtdha5HNAtprhAJaQUD4XEWP9fwLThobpxa8vRM4yauGQk5vwbDNnZU5byxwJA9UC/L2w/PybJywVstO/P1euvcujWMtHelBwdUKhHz2ATLvAdxKc0CQkW914TNjyR9VSQl6LL3jGLNsQuS/ZjqsTndHcv1aXmV7jJjwFIwesgNeH60Bpgwbkda4WnXLkc2xjXdlxH+GBT2N0M4yQNfIMLWpSd04OhiVsrim/eWAgDs0/G5SeGgusx4ZxC3HRzXS49qUeGW4PUHfuFfEwpQm6EoQv+Y0QTlKcPYBGeAMsv7tvu0dBd8UZtxxM26OSLjThZTXY5TyF5nmcap2OWH2V06h3HkxidY1n68otIl9Mix+uB4fkvXFOkRoWKA5zALeXZ6/VzyW2tA39jiWZ3/0shJENVW9mcfmeQQNIXrVQlk3gcb21ifPEoMJSIIR7MmeRMb48peXOYPMkV43V/U2N6bYIU0gzwGBnTegOepE7Sz0sdEUeb8IMs+aoe/7J4R2UdumejNNU8LOfduuUGab14Jb146M2eyzquy+NkhDeE6hs3o8EQi+t2ZAmhNRAp+K13glEQsSfxqE3U4WPqsg5fcJiRPzm3YyFD0MSQlAQKcxwCxFSILsgDvkbshI2/IFtVCeG/c0/yXhgJP06Px8/yGwW5uBtY3GmQ9ffzD/m7UEiIfN6Eh+Q1Dp5Ft7LHXF3Gj/y8DjnQR2COzUBTdJTEy6/LEeCCFutIV7VAWJ58QN3YYuLi62GzsbYMN+eFK+phqCSmpTDrGVASc1+IXrYOBYJfSBSPYlXdDpW8ETQL1mYXZsn/XFd+xIgLWiFDxyjdUQkXl6IEwmtJRTyl7XvyekYxrKzb70rTb0JUpOIlc5T6WuYAsa7bm/F03TiUhjYJisrlls6JQ5iDgW+WDHRp2ZfqOn6U86ZegnQHwNuTCa+JcssdeQ4tJaRQY8pomy03ezGPIUBZN66ClffIfzpMpg3CnuJcIsnhTQEyoNyJwBMDgFazFmTDj8AqMlNpt8pjJZwkFyZ9OcGGoiDOJ38DVuBtlG/6YgX2LKC41UKJFi4yvQ7eQNO/yMC9NMFJ9FAsAUeZ1H4zbSMLLF19oVZZogS9G6lEJ+/78GOPXLEueNID5NtsyX1/sLoB0/rern36g9Tsuie1G86zfely9mwDneMTHIrvdzhMGaNVaa8ucvdOyqDYy6PSGV6cvX8cFfwjWEtKB4CpBWuyEcqThIDanacF14U1K2v3xzlG147eq4fQsxh9v4gW3SV5StS3882mmpZbtem/8JvafQ5NGNCIH+SqLv0Wc405MlPAYqFhbSmAPkSKuyFAJOt08+R0Sz1euz8wRhDhal9ILyShulYvq0UKC+errUKrul7nwKHwieluCpvNDlUusGVbGsmKhqJO1gpWzdKkkkMzE6veJKgFIJOklYdyP03atev5Y9l7OIUWuz8OsSewIaBXRYL2P1dCLpemSTni8PRPjQvx+Yc5w/LqwA0JPLo5Q3l8+yWnB5jjVrYZ8ixjsDhrlw8YjAcFPEaXX8n3gJgo86EfNkvzJvg9jUqjJbeX6DsDd0vRZMJ51RJX2qS3arWTHx0hOPvC9ou3DWcKU0JMCETDqyH4SHuArZKYNgLG/Ua0G6xuXrxe5e2NUHMH7J3AOBJSQMug/2z2z4QUrRgreK1emttIquo6a5kbUin54ZKHzDFjJWBfMVBafIAMZOakgQrdxPGBZ5HRQf/65VyPJJrGsikAvXB8IhCLJa/lMmtLkX0cuaLGwCgEAF1m8+V0eZQS/FhZWZns3AucuODPfzD1mVu1YsCsRhV8NEXa3HAiupbYnLqcIcdAVlGg1WhgcwZkbNFAqCjYMtsd7xqnDliu5bWxkMIbWlex0Idg+BLwnn83grRO2On+Rfim0Fn5Qh1m4rxVtqA4QG6MpaE8L4LJUf9iz4WzgdGjP/OQwvOH9WKRD3Yt835fBFt9bNcGUExyn/8ukblVogW0u7kGXEqvhmMgXCqhrlqgN1zyBQXfDP+VQEJmkgBdh988QR6dujb1Cx5wHjQLmi1yn9WUX/SiYac/Z+kPXdKaUlJoMnv4ZrynA8ykjnHdvhqTJmlRltInupZ3RVZrpsnX14RKvK4klrftkUf2tnPr/0T/otRybMU5FIATRsFjyXpC5KuZp+74veEfAtO3SNgRnx/QthMOdl29nKWdLACjMY9+ZUJYBbWm29zdmdu8NZyQ4kdVOnQ9sJesYpjKQ8NwnjUsDbTjYoBs2fN9Dqcre8Tx7cVycIVsjoLSLNNCibnJua3IemfJqfHkfqOzAyDFy3Tc8y6emEBybi6xYEQRzEi6kPbtJ5/u2A+RqCJU6KFAxeKDHVWK2ZTlhnykG+0GOqngnwteztDDEI4TZ/NsQjd3TzYN3Fq0NsEIMwVQmiSKAc3Jed/fPjzl8CVmfXL7EKPYW0dvrfJw5+AuA5mOhRN+/bK5q4EtGbeiLXIi755mVPs+bzDm8UCSI9WLSpyYJGm7SjDqTP+Ctm4WqTsm+AmFsoNB14jdOHsmVieZX4UPgsKlN69NrAshqW/gBwlwBFYXGmhiQku/JWPJ0aLpNSYmozht4Ud+PWDT63mQThP/q0QHIPrJ5U9jQxrDft6zVIxNxpE+yxZu6mqGwnAkcjd7DFCarMvIpKysEc3rRz4KVBEQJGRu5hi4f1N+WYnpo5WANGICm40pUJXhmB/cm/fnUPg9DxRQTVqOMkVCI8lLy77290+92yK/G+6g4gaby28yWIiXitVWZsh6eLS8GljcZawPgd6BM6Vve7gpHwu/g45kfaWoQ40H71V9bCCGGMKOA+LzZ+EcsWsIm5AGyRMLA9ub0rO98i9YrC3UNbeZ6iBa91BzAMCR1FqKSkg0gWc4KviAqbAWN8dNVO/EgIbkfQC0E3jYi2hOaMHEZtKw4eVR4Ubp8Fe8UOr5AEqksAq4f+9VEv66yHD83u16b3pBDljrY3tZMyYR+N82ajO4YsnUbKsvd+rXS0j6OsSE2M1KIAnqjSm0qxYpI5vXMb1yB4McJeWMQ02KNrenhDagBdXNLkDkawKO6f31YlgSv/S2RB2ouMOzvHNXyc5Ykhij2PjG4iDLFh4X5FRutUx4TT8RyhVwNxl11bfmX5rwg4+I5IvZFAKCg9rcA80LLs0p/MLv5OS8xpQGXRMMCCN3cqdLmn0GbCgkIGXR9jvCc8cWYr68e9A6aYIKSJfbTJn3ed1E4P7sBIe7bld5McA5GGprCFFEyY8nB/2ur1WFXGWD+WfsRk4u+Qxk1PO8YaNrwdG7yZh3imyiB62HHDeK2XCVv5appupey0Pu6xoa556IdumxTuZBTrzKg2soGzgSz0C99GLMrc3bJlTYHDdRw3HdVKiiw/4uCcvhjIuO2ODOBK5yS4j+WwBBFMxuoE6gLyIC64zW9uyAzu1eslPBl4Ti4OZwfBuLo8avzH4kjy4GyYTWyzQ0pwkamqE7ZxtchnyRR8viirLuwTQGsSI2PsCsinsfqfftg/SKB8+fHOooZZBM9sW1E3Uy+g+ZnERRnGuf3VBqZ3/d8Nak9qK7zBeVdcJhNYThspMh+q1bFuPZU3i6F7uYRHP/AcAuaLiBXzoJHP1lf+bpfaB5D8wreSD0W1Ulqu6S3LolSFanRlpgWBvTwcMYhG+lUBiTAvWqJGmP6eC9Imy7joOGThMfEGxlIDQNebfWpUspWGxApSB0SYKUTd7gdKVgvtUyZg6Ju7AP965MkoMtGVJ0VUu0Jf3KgHe47kOGZs/rPWpTxmvN5R+l8J1zD7sZ8Iu3IbGlsQbWTmKequ8Q3XThfAXgLpFX0cR66TAuGDTQVryKCPQaGOl3ARMBvIAK5QGu5O7DqspzP5MIBlSsAe6Qufn9gVwHnuP33FYQlffLjntwscjQ7/W7rZnBJP4bAYJ1IEcTt7GDMtWOwXmho8gy/748U95H7HVDXu5v37p0ee39H47SAB1ks+eX/Vu5mSDccRzS2xePqM1nY4gHdTc7kyLJiRDTrT6Kj6cHIyGmHHX0DLtciOCGm7/ldmGdQTu7iD3D7UTcS9Og3KDgrC0XxO5DYaKomGL5WMXVqsf4cbglKqal5GnMDuJXLaWThq4YkplK5TCT9xBUgQexJ4Gwgo/xbQxRivXtOckxhS4+4y21IiYz5k8UDnPI55a+9gGLBh8zOCGbDAvjd0hFycsdssQbPBiQ7QZzNQaiTdhy78eoFGFNvBP9WUbHqom4P7wdQArA1pC2aHaF20KUr9nxTcrCq6VyDjb9JjfowA1IzOTd0XoeUAtyXZIsNKOqWATQKSVNABuK8uyCacWoBibkFovZPEi0J/2Uf+8ZF3VkJ6vzenhS65mjy3KIoTYPLFUcgyMZfI7f/tIm5lhggYwHSy8QUPvHJFMGUQlSVsw2sVfGUpo2KnWIhxiXvRZWFf2WguhWFS7/jzVBJCTGt5Q1or0SR8zpZpcJEBWHOpzbPfznmSJPH7TTw4kKI82IqUIfYH/eewhEPGNsMcY1aXbp2JiShxk/gw3+H2OGpFFTO8AoDKkK50+5i8V/odmLAjn6yRdq3IEK5lEesss2PlO7y16RmlV2eTblQrsn7s/cDAYvbDxKYvcwLVYJVa3fDUu7ZdUFG66zNfpLXCAvwHwQolt9gEie/8FewNUwvpyrZ6aBEOtiHTy6w8WZ3WSh4Q9VhgQHo72Zi5qo9ueBlhD3ZNk2jmkpH6Z7Konxw5hVQWJlixx9A8dO3eYep7w5BuDtN9KHmWjkJxqFkYsFZ1/No7udvRMywE+fNKmrHT+S/R3v7aX8tAPIa60vBv0ll6Cepf4/mkbgkPbNWukcRyti/HHd8W7gQnACMTlt2ZTzbWf+8kti4d9ULXWrB2X4KPVQo8wgXRJo+tiCeeuokW79uxxoqRgZoJb3Sk0PXAdUM686uegzpviBLxRou5kB6XZZ+7CizctolqUyAHEnaszufe880E3KJQ37e2LkEzXNGF/fSyA6X7ChgPDxER+a30hdXSDrboa/AA5SQ983GEyUmbaZZAuqq4ucVWgZXSVe1nQiO9SPcYAZABh52kJ+Z9oZMOPU4IYJQ/1KhWb07eJqvO46y8i+1Ks3zuj8o2zpfKEFBqfxQbTms8ZvMlAewx1qs5XRzJPPMBUxiQXdLh6wY12NEopWtjW3pwLlZIxk5iEe4KD/II9v6fGsn3SGYqAkbkKB9ksMOkdvWe0IRr5mUrbodO0UGpshTRi/lk9+JNxO3pFTSP3NKGtCvur/FVdtNcTt+/4xjHzcmcNVBjlIaGafl4CmrVddE0SVrjkSNzpMotWXNH1dPQvssb5bG+Punx88ieBJwoXDlcTy6/dg4/Ou25Pzv4V098aXapEwZUTNRK7Xjm5nb5vrTlmCU+d7jWMj/Pc38dg75FR4qpRpHMfO2c+Sz2TrTXATqHv2UcaVsI3AtA4hLRBCxMpB0mFCAQL0BlswMtUh7I9/bhN/1MOeZxTrgDNbarpDcGUBGia1xiMlltubA8OKr7asStp56WlgmWwuT0dj0TJ6MZcsZPkH7GDAUCMSCtNKaxXM4vRgqpwROeW0n4B8/C46dxnJCqk8ES8fP5M590ziDddO4sRkAnxC5kQNj5N65lqwK9b8jfC1T7rkhWXgB93e1YNo4vbkjDT/CTLhCLKHNDwJ/mNUYQuKrib9W/l75GJ9qUBrBBLNf6h4WcBcNOH05JklcJ9X8q7PU3lwQvoIZNYl0YzOzYM6fzWpRylS3hDpDhBwipC+bA7XBXIfQH92mq3HcfR1xCvbY9Kx6vGr+/UGPyjfFZs8K5X6B3pD/yD3PoN88FDxftMsa3j+0ZUKSDMqcIPHC5ibA9QE5/wDFiTPeMeSfLJNKL9dkPtlE833E0pjtVBTs+KeA3KQ4Eey7FY97DhBJQCTWO1kb8whyo5cLEhCjypwygCRH5Hzrt48TRvKpW/o1Snafib5exFO7xSwq+9lRVbh64f2hbiu6v19xn31CHuKZjQ15CUu2asl/t+hUhuI6hlW2K9VjVKQShLMu01UnGprMQo8yfyyiWJq7ejkBCUz03ljzFe7eLP2w3177dt/2da9S/Ix8v2widCOLTOgVkkh8P9tHRL7I/jnR994fcnbCFGQuVSVjoFVG1PAtSZydteOW48qQryEZGGYeoRKFbERHBpUTeCICN6V+o4Az7kwkMzjJN9EEK+7aqwV+n0ByLhNmyqP56lGzd10AttVnFMC0DepXkicMWqdYvUo4gOj0IDGaykiFcy+7accNeTnFxjCEJmvjqyqAYK2rue3gECbc6bXLy9b/PtM+L/3ShrhqcHuH8rMB0XBb4laQGoy9b7wZN6eO8Vjo9UMMfIku3Q1mPtmZJ0leq62WA==\"}"
-}
+}
\ No newline at end of file
diff --git a/backend/src/db/api/tasks.js b/backend/src/db/api/tasks.js
index 48f6e08..bbb6f42 100644
--- a/backend/src/db/api/tasks.js
+++ b/backend/src/db/api/tasks.js
@@ -21,6 +21,8 @@ module.exports = class TasksDBApi {
priority: data.priority || null,
is_procrastinating: data.is_procrastinating || false,
+ iscompleted: data.iscompleted || false,
+
importHash: data.importHash || null,
createdById: currentUser.id,
updatedById: currentUser.id,
@@ -49,6 +51,8 @@ module.exports = class TasksDBApi {
priority: item.priority || null,
is_procrastinating: item.is_procrastinating || false,
+ iscompleted: item.iscompleted || false,
+
importHash: item.importHash || null,
createdById: currentUser.id,
updatedById: currentUser.id,
@@ -83,6 +87,9 @@ module.exports = class TasksDBApi {
if (data.is_procrastinating !== undefined)
updatePayload.is_procrastinating = data.is_procrastinating;
+ if (data.iscompleted !== undefined)
+ updatePayload.iscompleted = data.iscompleted;
+
updatePayload.updatedById = currentUser.id;
await tasks.update(updatePayload, { transaction });
@@ -270,6 +277,13 @@ module.exports = class TasksDBApi {
};
}
+ if (filter.iscompleted) {
+ where = {
+ ...where,
+ iscompleted: filter.iscompleted,
+ };
+ }
+
if (filter.createdAtRange) {
const [start, end] = filter.createdAtRange;
diff --git a/backend/src/db/migrations/1749136812314.js b/backend/src/db/migrations/1749136812314.js
new file mode 100644
index 0000000..9b54f3f
--- /dev/null
+++ b/backend/src/db/migrations/1749136812314.js
@@ -0,0 +1,52 @@
+module.exports = {
+ /**
+ * @param {QueryInterface} queryInterface
+ * @param {Sequelize} Sequelize
+ * @returns {Promise}
+ */
+ async up(queryInterface, Sequelize) {
+ /**
+ * @type {Transaction}
+ */
+ const transaction = await queryInterface.sequelize.transaction();
+ try {
+ await queryInterface.addColumn(
+ 'tasks',
+ 'iscompleted',
+ {
+ type: Sequelize.DataTypes.BOOLEAN,
+
+ defaultValue: false,
+ allowNull: false,
+ },
+ { transaction },
+ );
+
+ await transaction.commit();
+ } catch (err) {
+ await transaction.rollback();
+ throw err;
+ }
+ },
+ /**
+ * @param {QueryInterface} queryInterface
+ * @param {Sequelize} Sequelize
+ * @returns {Promise}
+ */
+ async down(queryInterface, Sequelize) {
+ /**
+ * @type {Transaction}
+ */
+ const transaction = await queryInterface.sequelize.transaction();
+ try {
+ await queryInterface.removeColumn('tasks', 'iscompleted', {
+ transaction,
+ });
+
+ await transaction.commit();
+ } catch (err) {
+ await transaction.rollback();
+ throw err;
+ }
+ },
+};
diff --git a/backend/src/db/models/tasks.js b/backend/src/db/models/tasks.js
index e8b1d65..08a3082 100644
--- a/backend/src/db/models/tasks.js
+++ b/backend/src/db/models/tasks.js
@@ -39,6 +39,13 @@ module.exports = function (sequelize, DataTypes) {
defaultValue: false,
},
+ iscompleted: {
+ type: DataTypes.BOOLEAN,
+
+ allowNull: false,
+ defaultValue: false,
+ },
+
importHash: {
type: DataTypes.STRING(255),
allowNull: true,
diff --git a/backend/src/db/seeders/20231127130745-sample-data.js b/backend/src/db/seeders/20231127130745-sample-data.js
index 4429026..67b0bcc 100644
--- a/backend/src/db/seeders/20231127130745-sample-data.js
+++ b/backend/src/db/seeders/20231127130745-sample-data.js
@@ -16,6 +16,8 @@ const TasksData = [
is_procrastinating: false,
// type code here for "relation_one" field
+
+ iscompleted: true,
},
{
@@ -30,6 +32,8 @@ const TasksData = [
is_procrastinating: false,
// type code here for "relation_one" field
+
+ iscompleted: true,
},
{
@@ -39,11 +43,29 @@ const TasksData = [
due_date: new Date('2023-11-03T09:00:00Z'),
- priority: 'Medium',
+ priority: 'High',
is_procrastinating: true,
// type code here for "relation_one" field
+
+ iscompleted: false,
+ },
+
+ {
+ title: 'Review code submissions',
+
+ description: 'Review the latest code submissions from the team.',
+
+ due_date: new Date('2023-11-02T14:00:00Z'),
+
+ priority: 'High',
+
+ is_procrastinating: false,
+
+ // type code here for "relation_one" field
+
+ iscompleted: true,
},
];
@@ -82,6 +104,17 @@ async function associateTaskWithUser() {
if (Task2?.setUser) {
await Task2.setUser(relatedUser2);
}
+
+ const relatedUser3 = await Users.findOne({
+ offset: Math.floor(Math.random() * (await Users.count())),
+ });
+ const Task3 = await Tasks.findOne({
+ order: [['id', 'ASC']],
+ offset: 3,
+ });
+ if (Task3?.setUser) {
+ await Task3.setUser(relatedUser3);
+ }
}
module.exports = {
diff --git a/backend/src/routes/tasks.js b/backend/src/routes/tasks.js
index 5f333c3..cfa3b53 100644
--- a/backend/src/routes/tasks.js
+++ b/backend/src/routes/tasks.js
@@ -161,6 +161,17 @@ router.post(
* description: Data of the updated item
* type: object
* $ref: "#/components/schemas/Tasks"
+
+
+// New endpoint for task statistics
+router.get(
+ '/stats',
+ wrapAsync(async (req, res) => {
+ const stats = await TasksService.stats(req.currentUser);
+ res.status(200).send(stats);
+ }),
+);
+
* required:
* - id
* responses:
diff --git a/backend/src/services/tasks.js b/backend/src/services/tasks.js
index 4af1d3d..f0cf1d1 100644
--- a/backend/src/services/tasks.js
+++ b/backend/src/services/tasks.js
@@ -111,4 +111,29 @@ module.exports = class TasksService {
throw error;
}
}
+
+ /**
+ * Get task statistics: total, completed, pending, and by priority counts.
+ */
+ static async stats(currentUser) {
+ // Count total tasks
+ const total = await TasksDBApi.findAll({}, null, { countOnly: true, currentUser });
+ // Count completed tasks
+ const completed = await TasksDBApi.findAll({ iscompleted: true }, null, { countOnly: true, currentUser });
+ // Count pending tasks
+ const pending = await TasksDBApi.findAll({ iscompleted: false }, null, { countOnly: true, currentUser });
+ // Group by priority
+ const dbModels = require('../db/models');
+ const { fn, col } = dbModels.sequelize;
+ const raw = await dbModels.tasks.findAll({
+ attributes: ['priority', [fn('COUNT', col('priority')), 'count']],
+ group: ['priority'],
+ });
+ const byPriority = {};
+ raw.forEach(r => {
+ byPriority[r.get('priority')] = parseInt(r.get('count'), 10);
+ });
+ return { total, completed, pending, byPriority };
+ }
+
};
diff --git a/frontend/src/components/Tasks/CardTasks.tsx b/frontend/src/components/Tasks/CardTasks.tsx
index 3cd7ebd..4fbe5f4 100644
--- a/frontend/src/components/Tasks/CardTasks.tsx
+++ b/frontend/src/components/Tasks/CardTasks.tsx
@@ -135,6 +135,17 @@ const CardTasks = ({
+
+
+
+ Iscompleted
+
+
+
+ {dataFormatter.booleanFormatter(item.iscompleted)}
+
+
+
))}
diff --git a/frontend/src/components/Tasks/ListTasks.tsx b/frontend/src/components/Tasks/ListTasks.tsx
index 7bdca35..db1f053 100644
--- a/frontend/src/components/Tasks/ListTasks.tsx
+++ b/frontend/src/components/Tasks/ListTasks.tsx
@@ -90,6 +90,13 @@ const ListTasks = ({
{dataFormatter.usersOneListFormatter(item.user)}
+
+
+
Iscompleted
+
+ {dataFormatter.booleanFormatter(item.iscompleted)}
+
+
state.style.websiteHeder);
const borders = useAppSelector((state) => state.style.borders);
- const style = HeaderStyle.PAGES_RIGHT;
+ const style = HeaderStyle.PAGES_LEFT;
const design = HeaderDesigns.DESIGN_DIVERSITY;
return (
diff --git a/frontend/src/pages/dashboard.tsx b/frontend/src/pages/dashboard.tsx
index 43985ab..1c1f42d 100644
--- a/frontend/src/pages/dashboard.tsx
+++ b/frontend/src/pages/dashboard.tsx
@@ -2,6 +2,11 @@ import * as icon from '@mdi/js';
import Head from 'next/head';
import React from 'react';
import axios from 'axios';
+import { Chart as ChartJS, ArcElement, Tooltip, Legend, CategoryScale, LinearScale, BarElement } from 'chart.js';
+import { Pie, Bar } from 'react-chartjs-2';
+
+ChartJS.register(ArcElement, Tooltip, Legend, CategoryScale, LinearScale, BarElement);
+
import type { ReactElement } from 'react';
import LayoutAuthenticated from '../layouts/Authenticated';
import SectionMain from '../components/SectionMain';
diff --git a/frontend/src/pages/tasks/[tasksId].tsx b/frontend/src/pages/tasks/[tasksId].tsx
index c008461..0d4962e 100644
--- a/frontend/src/pages/tasks/[tasksId].tsx
+++ b/frontend/src/pages/tasks/[tasksId].tsx
@@ -47,6 +47,8 @@ const EditTasks = () => {
is_procrastinating: false,
user: null,
+
+ iscompleted: false,
};
const [initialValues, setInitialValues] = useState(initVals);
@@ -162,6 +164,14 @@ const EditTasks = () => {
>
+
+
+
+
diff --git a/frontend/src/pages/tasks/tasks-edit.tsx b/frontend/src/pages/tasks/tasks-edit.tsx
index d52c214..e2047a6 100644
--- a/frontend/src/pages/tasks/tasks-edit.tsx
+++ b/frontend/src/pages/tasks/tasks-edit.tsx
@@ -47,6 +47,8 @@ const EditTasksPage = () => {
is_procrastinating: false,
user: null,
+
+ iscompleted: false,
};
const [initialValues, setInitialValues] = useState(initVals);
@@ -160,6 +162,14 @@ const EditTasksPage = () => {
>
+
+
+
+
diff --git a/frontend/src/pages/tasks/tasks-new.tsx b/frontend/src/pages/tasks/tasks-new.tsx
index 8cef9e1..87f97df 100644
--- a/frontend/src/pages/tasks/tasks-new.tsx
+++ b/frontend/src/pages/tasks/tasks-new.tsx
@@ -44,6 +44,8 @@ const initialValues = {
is_procrastinating: false,
user: '',
+
+ iscompleted: false,
};
const TasksNew = () => {
@@ -124,6 +126,14 @@ const TasksNew = () => {
>
+
+
+
+
diff --git a/frontend/src/pages/tasks/tasks-view.tsx b/frontend/src/pages/tasks/tasks-view.tsx
index a1c4cc9..dac7f87 100644
--- a/frontend/src/pages/tasks/tasks-view.tsx
+++ b/frontend/src/pages/tasks/tasks-view.tsx
@@ -106,6 +106,14 @@ const TasksView = () => {
{tasks?.user?.firstName ?? 'No data'}
+
+ null }}
+ disabled
+ />
+
+
{
Priority |
IsProcrastinating |
+
+ Iscompleted |
@@ -184,6 +186,10 @@ const UsersView = () => {
item.is_procrastinating,
)}
+
+
+ {dataFormatter.booleanFormatter(item.iscompleted)}
+ |
))}