From 4e740906735894bf436c9f26f2665fc5af70e34d Mon Sep 17 00:00:00 2001 From: adescoteaux1 Date: Thu, 10 Apr 2025 22:28:17 -0400 Subject: [PATCH 1/2] attach recommendations to manual transaction --- .../handler/lineItem/post_line_items.go | 15 ++++++++++ .../storage/postgres/schema/line_item.go | 6 ++++ frontend/src/app/(main)/contacts/page.tsx | 29 +++++++++++++++---- frontend/src/app/(main)/layout.tsx | 4 +-- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/backend/internal/service/handler/lineItem/post_line_items.go b/backend/internal/service/handler/lineItem/post_line_items.go index 18c6557d..a438ce4a 100644 --- a/backend/internal/service/handler/lineItem/post_line_items.go +++ b/backend/internal/service/handler/lineItem/post_line_items.go @@ -3,6 +3,7 @@ package lineItem import ( "arenius/internal/errs" "arenius/internal/models" + "context" "fmt" "time" @@ -59,5 +60,19 @@ func (h *Handler) PostLineItem(c *fiber.Ctx) error { } } + companyId, err := uuid.Parse(req.CompanyID) + if err != nil { + fmt.Println("Error parsing company ID for auto reconciliation:", err) + } else { + ctx := c.UserContext() + + go func(ctx context.Context, companyId uuid.UUID) { + _, autoReconcileErr := h.lineItemRepository.AutoReconcileLineItems(ctx, companyId) + if autoReconcileErr != nil { + fmt.Println("Async auto-reconciliation error:", autoReconcileErr) + } + }(ctx, companyId) + } + return c.Status(fiber.StatusCreated).JSON(createdItem) } diff --git a/backend/internal/storage/postgres/schema/line_item.go b/backend/internal/storage/postgres/schema/line_item.go index f0400e88..7a69bdbc 100644 --- a/backend/internal/storage/postgres/schema/line_item.go +++ b/backend/internal/storage/postgres/schema/line_item.go @@ -423,6 +423,9 @@ func (r *LineItemRepository) GetLineItemsByIds(ctx context.Context, lineItemIDs } func (r *LineItemRepository) AutoReconcileLineItems(ctx context.Context, companyId uuid.UUID) ([]models.LineItem, error) { + + fmt.Println("Autoreconciling") + const unreconciledTransactionsQuery = ` SELECT id, description FROM line_item @@ -584,6 +587,9 @@ func (r *LineItemRepository) AutoReconcileLineItems(ctx context.Context, company return nil, fmt.Errorf("parsing updated line_items failed: %w", err) } + fmt.Println("Autoreconcile complete") + fmt.Println("Updated line items:", updatedLineItems) + return updatedLineItems, nil } diff --git a/frontend/src/app/(main)/contacts/page.tsx b/frontend/src/app/(main)/contacts/page.tsx index 011783d0..72aab027 100644 --- a/frontend/src/app/(main)/contacts/page.tsx +++ b/frontend/src/app/(main)/contacts/page.tsx @@ -1,7 +1,6 @@ "use client"; -import { useEffect } from "react"; -import Link from "next/link"; +import { useEffect, useState } from "react"; import Image from "next/image"; import { Search } from "lucide-react"; @@ -11,6 +10,8 @@ import ExportContactsButton from "@/components/contacts/ExportContacts"; import ContactTable from "@/components/contacts/ContactTable"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; +import LoadingSpinner from "@/components/ui/loading-spinner"; +import Link from "next/link"; export default function Contacts() { return ( @@ -25,6 +26,8 @@ function ContactsContent() { const { searchTerm, setSearchTerm, debouncedTerm } = useDebouncedSearch( filters.search_term ); + const [isNavigating, setIsNavigating] = useState(false); + useEffect(() => { setFilters((prevFilters) => ({ @@ -35,6 +38,14 @@ function ContactsContent() { return (
+ {isNavigating && ( +
+
+ +
+
+ )} +

Contacts

@@ -47,8 +58,16 @@ function ContactsContent() { />
- - diff --git a/frontend/src/app/(main)/layout.tsx b/frontend/src/app/(main)/layout.tsx index 20068f7d..664e516c 100644 --- a/frontend/src/app/(main)/layout.tsx +++ b/frontend/src/app/(main)/layout.tsx @@ -11,7 +11,7 @@ import TransactionsIcon from "@/components/icons/transactions"; import { ProfileDropdown } from "@/components/user_profile/ProfileDropdown"; import LoadingSpinner from "@/components/ui/loading-spinner"; import onboardingLogo from "@/assets/onboarding-logo.png"; -import { Toaster } from "@/components/ui/sonner"; +//import { Toaster } from "@/components/ui/sonner"; interface LayoutProps { children: ReactNode; @@ -96,7 +96,7 @@ const Layout: React.FC = ({ children }) => {
- + {/* */} {children}
From 29fd8d74251227d119e5a93312ccd49c7c61c506 Mon Sep 17 00:00:00 2001 From: adescoteaux1 Date: Fri, 11 Apr 2025 11:15:05 -0400 Subject: [PATCH 2/2] cleanup --- .../service/handler/lineItem/handle_recommendation.go | 2 -- .../service/handler/xero/sync_company_transactions.go | 2 -- backend/internal/storage/postgres/schema/line_item.go | 5 ----- frontend/src/app/(main)/layout.tsx | 4 ++-- 4 files changed, 2 insertions(+), 11 deletions(-) diff --git a/backend/internal/service/handler/lineItem/handle_recommendation.go b/backend/internal/service/handler/lineItem/handle_recommendation.go index f7cb07f8..4f2b81ba 100644 --- a/backend/internal/service/handler/lineItem/handle_recommendation.go +++ b/backend/internal/service/handler/lineItem/handle_recommendation.go @@ -14,8 +14,6 @@ func (h *Handler) HandleRecommendation(c *fiber.Ctx) error { return errs.BadRequest("Invalid line item ID") } - fmt.Println("ID:", id) - accept := c.Query("accept") == "true" lineItem, err := h.lineItemRepository.HandleRecommendation(c.Context(), id, accept) diff --git a/backend/internal/service/handler/xero/sync_company_transactions.go b/backend/internal/service/handler/xero/sync_company_transactions.go index 34de785c..e81544aa 100644 --- a/backend/internal/service/handler/xero/sync_company_transactions.go +++ b/backend/internal/service/handler/xero/sync_company_transactions.go @@ -39,8 +39,6 @@ func (h *Handler) syncCompanyTransactions(ctx *fiber.Ctx, company models.Tenant) } accessToken := newToken.AccessToken - fmt.Println("new token", newToken) - fmt.Println("access", accessToken) e := h.UserRepository.SetUserCredentials(ctx.Context(), *company.UserID, company.ID, newToken.RefreshToken, *company.XeroTenantID) if e != nil { fmt.Println("error updating user credentials", e) diff --git a/backend/internal/storage/postgres/schema/line_item.go b/backend/internal/storage/postgres/schema/line_item.go index 2d99d632..719793ea 100644 --- a/backend/internal/storage/postgres/schema/line_item.go +++ b/backend/internal/storage/postgres/schema/line_item.go @@ -424,8 +424,6 @@ func (r *LineItemRepository) GetLineItemsByIds(ctx context.Context, lineItemIDs func (r *LineItemRepository) AutoReconcileLineItems(ctx context.Context, companyId uuid.UUID) ([]models.LineItem, error) { - fmt.Println("Autoreconciling") - const unreconciledTransactionsQuery = ` SELECT id, description FROM line_item @@ -587,9 +585,6 @@ func (r *LineItemRepository) AutoReconcileLineItems(ctx context.Context, company return nil, fmt.Errorf("parsing updated line_items failed: %w", err) } - fmt.Println("Autoreconcile complete") - fmt.Println("Updated line items:", updatedLineItems) - return updatedLineItems, nil } diff --git a/frontend/src/app/(main)/layout.tsx b/frontend/src/app/(main)/layout.tsx index 664e516c..20068f7d 100644 --- a/frontend/src/app/(main)/layout.tsx +++ b/frontend/src/app/(main)/layout.tsx @@ -11,7 +11,7 @@ import TransactionsIcon from "@/components/icons/transactions"; import { ProfileDropdown } from "@/components/user_profile/ProfileDropdown"; import LoadingSpinner from "@/components/ui/loading-spinner"; import onboardingLogo from "@/assets/onboarding-logo.png"; -//import { Toaster } from "@/components/ui/sonner"; +import { Toaster } from "@/components/ui/sonner"; interface LayoutProps { children: ReactNode; @@ -96,7 +96,7 @@ const Layout: React.FC = ({ children }) => {
- {/* */} + {children}