From 65850e763d210c106a68c5ea895ce90f320b6068 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Tue, 4 Feb 2025 17:25:23 +0530 Subject: [PATCH] Login count : GWM --- main.go | 43 ++++++++++++++++++++++++++++++++++++++++--- pb_data/data.db | Bin 196608 -> 196608 bytes pb_data/data.db-shm | Bin 32768 -> 0 bytes pb_data/data.db-wal | Bin 8272 -> 0 bytes pb_data/logs.db | Bin 770048 -> 770048 bytes pb_data/logs.db-shm | Bin 32768 -> 0 bytes pb_data/logs.db-wal | Bin 53592 -> 0 bytes 7 files changed, 40 insertions(+), 3 deletions(-) delete mode 100644 pb_data/data.db-shm delete mode 100644 pb_data/data.db-wal delete mode 100644 pb_data/logs.db-shm delete mode 100644 pb_data/logs.db-wal diff --git a/main.go b/main.go index 69f4359..d8acbbc 100644 --- a/main.go +++ b/main.go @@ -282,9 +282,6 @@ func fetchfilterJSON(kpi string) ([]FilterGroup, error) { return nil, err } - // Debug Log Exclusion Filters - log.Printf("Raw Exclusion Filters JSON: %s", dataSetFilter.ExclusionFiltersJSON) - // Parse exclusion filters JSON if it's not empty var exclusionFilters []utils.FilterGroup if dataSetFilter.ExclusionFiltersJSON != "" { @@ -448,6 +445,46 @@ func main() { app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + e.Router.GET("/api/login_success", func(c echo.Context) error { + + userID := c.QueryParam("id") + if userID == "" { + return c.JSON(http.StatusBadRequest, map[string]string{"error": "User ID is required"}) + } + + // Find user by ID + record, err := app.Dao().FindRecordById("users", userID) + if err != nil { + log.Printf("User not found: %v", err) + return c.JSON(http.StatusNotFound, map[string]string{"error": "User not found"}) + } + + // Get current login count and convert it properly + var loginCount int + if count, ok := record.Get("login_count").(float64); ok { + loginCount = int(count) // Convert float64 to int + } else { + loginCount = 0 // Default if not set + } + + // Increment login count + loginCount++ + record.Set("login_count", loginCount) + + // Save the updated record + if err := app.Dao().SaveRecord(record); err != nil { + log.Printf("Failed to update login count: %v", err) + return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to update login count"}) + } + + log.Printf("User %s login count updated to %d", userID, loginCount) + return c.JSON(http.StatusOK, map[string]interface{}{ + "message": "Success", + "login_count": loginCount, + }) + + }) + e.Router.GET("/api/custom/apicalltest", func(c echo.Context) error { // Get the database instance db := app.Dao().DB() diff --git a/pb_data/data.db b/pb_data/data.db index 330e891acaee4bf27889f8b43a18792e38bfd817..94b957eb6f3f21458f59414a1c1719200908ae35 100644 GIT binary patch delta 647 zcmZo@;Av>!nIJ7_%D}*20K_m*JWZ%Q!t#n{kVRsjh*Mu7Qbyp`n$Lsg;STp1G+-RB&lg zYF%93O;||8{zls<; z82NP+lydUZGxOq;^Gowel%~fmVUph7RKnO&&85V^q{LCc%goR`*-)T(b92FbMy?)j zMnP>3QSr(8n{O4luuR{;#Uw6kP-I+cZj@W4q@$FVn479(g>2;Xz(#pi#%GgrR+}L#bl~^Wo>(o3YD+Q&H%-mFkfYhSQ{1hb}UM>Y7 zP)aNU$=q0ev*l*vja4@`-dL#s;@sGDv-M`%&8{0Or`yFb>DwwOQDVdjpb-?gfjOQj z%o*ffpo<+{VU7oLbRE4=`9a>Od^aTd>2>i;P1}z|Gx0OBFfcIdZoeMGq`4RXb3euw delta 327 zcmZo@;Av>!nIJ7_!oa{_0K_m*I8n!#(WEh9YXajkd9EM^J{4Xa9vkkU?E(sn4&0K7 zxsB;;BD}V)9NN4<(8yY7tH{aA%fUN6Lz{7nyos)%k*I3^b{ieWQ_hSQ)7c9cm4K910ptD2oQ(QhZ61Q`;^N|rJ^7mtGVWm9exZo5 zgK>LP31dq&*98Wq3mgT!%nZ$w4F!rfHy2niO@GbLB)a)RQ8%lIsjh*cu92aFfti(w zInYu)Gh?&u`9ByZg>wVF#Ke7sf%^#0<;{iy6>e{xlyu2-m(=SIe zJrp-oFf_0-Ft#!@)ibg*ib}~W%P&e!EuMZamPw1ZiHDKbR+iDViJOtfcKeZNCVobi PHZ3N;?blj#qpOTymZCV*1Y-4nm)Xy4+^FX0+I>mxt4~D);Ako#n;qn0)v?ta>EwZQt^` z?%Fs^X?HRZAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7eiMj)H41_M6o@~G3IPHH2oNAZfB*pk H-w50RcLOP# diff --git a/pb_data/data.db-wal b/pb_data/data.db-wal deleted file mode 100644 index 4daf1fbe657d2bcdf706721097b000142ee34b06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8272 zcmeI0&ui0Q7{}8NWUH%_&4D1p5axPVljcW%28slm!qjfFR>jHavi9vPt8JHLWmAUO z{a|?TPY{NOF`0)=M0WGw(VLe9JbCcuU*N?zY2Vn+sZ0wpcwdq<&-3JcpZERbeZGZ6 z9-pcc^yl*gah9;!^Ragy_MfdDY;9lP8|Z)C4P7Ix{&T~xW-fjDw(0HtNVvNd;`DoX z!3`6@1TXC?G;`)U(j%WE0&2ls!Bsorm2Ong@(ePBh zSgWWxpk>BVa&}Tqk4+@}X*rpd(z4`FrL&p4lk$CCuWDi-pn?)mGyoPApy`Uv6mnXQ znXA+o1;Ci52l9%p1d>;7O8!JL3pg!h*n*I-G!y#gY!x z>^xYupg5~V`I=#CH^8{v)21uQ^sO6+D5NdPZ3Zn}ZMW0c+U?|_xHM%$C&}p_?2n!z zg7l{urn2Mm9e5^N5?j7h7P=aHq>;<(nXdP`dQpiD4Gy9LW1}P+5?LM|j1Y@B8?j{v z`V+V9x^fEb?+Of#Vi#Dbvjqmi3lT*H!BU|xn~yEE7Fbjiq9Q9W;SlGntGrk$Stmhs z(eWWyLvhxMtBVN8uN24CN(AkplO{PKQHVe_W!SLb5ILUY=wL~=s>s)(IzGSeH%j9> zrqobQiZmzyRVn8HDXBm~S)hO!Z_RpB(ad!yZo9^TrD<)MP!0VopN`NtiBgKHDszC$ zELQ1$2&7nK3EKN;;KTS2U?ixB`-8B@%j{aBefPe8mc(Ukw!JF6@ z^F?xa%LAS6K9lJC3NN@}0+;|MfC*p%m;fe#319-4049J5U;>!H$s#b&HR?L_<=Wlf KHQICNW7~IbvvEuS diff --git a/pb_data/logs.db b/pb_data/logs.db index 038272a75f98568762287717d4bd949a1f4b6f15..a2df16a3a7809f382c6919f912a7739c2b01f371 100644 GIT binary patch delta 5727 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 Ln4`Bh@j&@MDHt?j delta 5562 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 diff --git a/pb_data/logs.db-shm b/pb_data/logs.db-shm deleted file mode 100644 index 4fb1e7202a90cfda11cea92b085897434b21b25a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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