mirror of
https://github.com/marcogll/TaxHacker_s23.git
synced 2026-01-13 13:25:18 +00:00
ci: use local prisma client
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -47,6 +47,7 @@ yarn-error.log*
|
|||||||
next-env.d.ts
|
next-env.d.ts
|
||||||
|
|
||||||
# databases
|
# databases
|
||||||
|
prisma/client
|
||||||
pgdata
|
pgdata
|
||||||
*.db
|
*.db
|
||||||
*.sqlite
|
*.sqlite
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { fileExists, fullPathForFile } from "@/lib/files"
|
import { fileExists, fullPathForFile } from "@/lib/files"
|
||||||
import { generateFilePreviews } from "@/lib/previews/generate"
|
import { generateFilePreviews } from "@/lib/previews/generate"
|
||||||
import { File, User } from "@prisma/client"
|
import { File, User } from "@/prisma/client"
|
||||||
import fs from "fs/promises"
|
import fs from "fs/promises"
|
||||||
|
|
||||||
const MAX_PAGES_TO_ANALYZE = 4
|
const MAX_PAGES_TO_ANALYZE = 4
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Category, Field, Project } from "@prisma/client"
|
import { Category, Field, Project } from "@/prisma/client"
|
||||||
|
|
||||||
export function buildLLMPrompt(
|
export function buildLLMPrompt(
|
||||||
promptTemplate: string,
|
promptTemplate: string,
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
import { Field } from "@prisma/client"
|
import { Field } from "@/prisma/client"
|
||||||
|
|
||||||
export const fieldsToJsonSchema = (fields: Field[]) => {
|
export const fieldsToJsonSchema = (fields: Field[]) => {
|
||||||
const fieldsWithPrompt = fields.filter((field) => field.llm_prompt)
|
const fieldsWithPrompt = fields.filter((field) => field.llm_prompt)
|
||||||
const schema = {
|
const schema = {
|
||||||
type: "object",
|
type: "object",
|
||||||
properties: fieldsWithPrompt.reduce((acc, field) => {
|
properties: fieldsWithPrompt.reduce(
|
||||||
|
(acc, field) => {
|
||||||
acc[field.code] = { type: field.type, description: field.llm_prompt || "" }
|
acc[field.code] = { type: field.type, description: field.llm_prompt || "" }
|
||||||
return acc
|
return acc
|
||||||
}, {} as Record<string, { type: string; description: string }>),
|
},
|
||||||
|
{} as Record<string, { type: string; description: string }>
|
||||||
|
),
|
||||||
required: fieldsWithPrompt.map((field) => field.code),
|
required: fieldsWithPrompt.map((field) => field.code),
|
||||||
additionalProperties: false,
|
additionalProperties: false,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import { ActionState } from "@/lib/actions"
|
|||||||
import { getCurrentUser } from "@/lib/auth"
|
import { getCurrentUser } from "@/lib/auth"
|
||||||
import { EXPORT_AND_IMPORT_FIELD_MAP } from "@/models/export_and_import"
|
import { EXPORT_AND_IMPORT_FIELD_MAP } from "@/models/export_and_import"
|
||||||
import { createTransaction } from "@/models/transactions"
|
import { createTransaction } from "@/models/transactions"
|
||||||
|
import { Transaction } from "@/prisma/client"
|
||||||
import { parse } from "@fast-csv/parse"
|
import { parse } from "@fast-csv/parse"
|
||||||
import { Transaction } from "@prisma/client"
|
|
||||||
import { revalidatePath } from "next/cache"
|
import { revalidatePath } from "next/cache"
|
||||||
|
|
||||||
export async function parseCSVAction(
|
export async function parseCSVAction(
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import { createField, deleteField, updateField } from "@/models/fields"
|
|||||||
import { createProject, deleteProject, updateProject } from "@/models/projects"
|
import { createProject, deleteProject, updateProject } from "@/models/projects"
|
||||||
import { SettingsMap, updateSettings } from "@/models/settings"
|
import { SettingsMap, updateSettings } from "@/models/settings"
|
||||||
import { updateUser } from "@/models/users"
|
import { updateUser } from "@/models/users"
|
||||||
import { Prisma, User } from "@prisma/client"
|
import { Prisma, User } from "@/prisma/client"
|
||||||
import { revalidatePath } from "next/cache"
|
import { revalidatePath } from "next/cache"
|
||||||
import { redirect } from "next/navigation"
|
import { redirect } from "next/navigation"
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { CrudTable } from "@/components/settings/crud"
|
|||||||
import { getCurrentUser } from "@/lib/auth"
|
import { getCurrentUser } from "@/lib/auth"
|
||||||
import { randomHexColor } from "@/lib/utils"
|
import { randomHexColor } from "@/lib/utils"
|
||||||
import { getCategories } from "@/models/categories"
|
import { getCategories } from "@/models/categories"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
|
|
||||||
export default async function CategoriesSettingsPage() {
|
export default async function CategoriesSettingsPage() {
|
||||||
const user = await getCurrentUser()
|
const user = await getCurrentUser()
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { prisma } from "@/lib/db"
|
import { prisma } from "@/lib/db"
|
||||||
import { DEFAULT_CATEGORIES, DEFAULT_CURRENCIES, DEFAULT_FIELDS, DEFAULT_SETTINGS } from "@/models/defaults"
|
import { DEFAULT_CATEGORIES, DEFAULT_CURRENCIES, DEFAULT_FIELDS, DEFAULT_SETTINGS } from "@/models/defaults"
|
||||||
import { User } from "@prisma/client"
|
import { User } from "@/prisma/client"
|
||||||
import { redirect } from "next/navigation"
|
import { redirect } from "next/navigation"
|
||||||
|
|
||||||
export async function resetLLMSettings(user: User) {
|
export async function resetLLMSettings(user: User) {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { addFieldAction, deleteFieldAction, editFieldAction } from "@/app/(app)/
|
|||||||
import { CrudTable } from "@/components/settings/crud"
|
import { CrudTable } from "@/components/settings/crud"
|
||||||
import { getCurrentUser } from "@/lib/auth"
|
import { getCurrentUser } from "@/lib/auth"
|
||||||
import { getFields } from "@/models/fields"
|
import { getFields } from "@/models/fields"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
|
|
||||||
export default async function FieldsSettingsPage() {
|
export default async function FieldsSettingsPage() {
|
||||||
const user = await getCurrentUser()
|
const user = await getCurrentUser()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { CrudTable } from "@/components/settings/crud"
|
|||||||
import { getCurrentUser } from "@/lib/auth"
|
import { getCurrentUser } from "@/lib/auth"
|
||||||
import { randomHexColor } from "@/lib/utils"
|
import { randomHexColor } from "@/lib/utils"
|
||||||
import { getProjects } from "@/models/projects"
|
import { getProjects } from "@/models/projects"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
|
|
||||||
export default async function ProjectsSettingsPage() {
|
export default async function ProjectsSettingsPage() {
|
||||||
const user = await getCurrentUser()
|
const user = await getCurrentUser()
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import {
|
|||||||
updateTransactionFiles,
|
updateTransactionFiles,
|
||||||
} from "@/models/transactions"
|
} from "@/models/transactions"
|
||||||
import { updateUser } from "@/models/users"
|
import { updateUser } from "@/models/users"
|
||||||
import { Transaction } from "@prisma/client"
|
import { Transaction } from "@/prisma/client"
|
||||||
import { randomUUID } from "crypto"
|
import { randomUUID } from "crypto"
|
||||||
import { mkdir, writeFile } from "fs/promises"
|
import { mkdir, writeFile } from "fs/promises"
|
||||||
import { revalidatePath } from "next/cache"
|
import { revalidatePath } from "next/cache"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { DEFAULT_PROMPT_ANALYSE_NEW_FILE } from "@/models/defaults"
|
|||||||
import { deleteFile, getFileById, updateFile } from "@/models/files"
|
import { deleteFile, getFileById, updateFile } from "@/models/files"
|
||||||
import { createTransaction, updateTransactionFiles } from "@/models/transactions"
|
import { createTransaction, updateTransactionFiles } from "@/models/transactions"
|
||||||
import { updateUser } from "@/models/users"
|
import { updateUser } from "@/models/users"
|
||||||
import { Category, Field, File, Project, Transaction } from "@prisma/client"
|
import { Category, Field, File, Project, Transaction } from "@/prisma/client"
|
||||||
import { mkdir, rename } from "fs/promises"
|
import { mkdir, rename } from "fs/promises"
|
||||||
import { revalidatePath } from "next/cache"
|
import { revalidatePath } from "next/cache"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
|
|||||||
@@ -77,5 +77,3 @@ export default async function SelfHostedWelcomePage() {
|
|||||||
</Card>
|
</Card>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const dynamic = "force-dynamic"
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { Badge } from "@/components/ui/badge"
|
|||||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
|
||||||
import { formatCurrency } from "@/lib/utils"
|
import { formatCurrency } from "@/lib/utils"
|
||||||
import { ProjectStats } from "@/models/stats"
|
import { ProjectStats } from "@/models/stats"
|
||||||
import { Project } from "@prisma/client"
|
import { Project } from "@/prisma/client"
|
||||||
import { Plus } from "lucide-react"
|
import { Plus } from "lucide-react"
|
||||||
import Link from "next/link"
|
import Link from "next/link"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
|
||||||
import { File } from "@prisma/client"
|
import { File } from "@/prisma/client"
|
||||||
import { Cake, FilePlus } from "lucide-react"
|
import { Cake, FilePlus } from "lucide-react"
|
||||||
import Link from "next/link"
|
import Link from "next/link"
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import {
|
|||||||
} from "@/components/ui/dialog"
|
} from "@/components/ui/dialog"
|
||||||
import { Separator } from "@/components/ui/separator"
|
import { Separator } from "@/components/ui/separator"
|
||||||
import { useTransactionFilters } from "@/hooks/use-transaction-filters"
|
import { useTransactionFilters } from "@/hooks/use-transaction-filters"
|
||||||
import { Category, Field, Project } from "@prisma/client"
|
import { Category, Field, Project } from "@/prisma/client"
|
||||||
import { formatDate } from "date-fns"
|
import { formatDate } from "date-fns"
|
||||||
import { useRouter } from "next/navigation"
|
import { useRouter } from "next/navigation"
|
||||||
import { useState } from "react"
|
import { useState } from "react"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import { formatBytes } from "@/lib/utils"
|
import { formatBytes } from "@/lib/utils"
|
||||||
import { File } from "@prisma/client"
|
import { File } from "@/prisma/client"
|
||||||
import Image from "next/image"
|
import Image from "next/image"
|
||||||
import Link from "next/link"
|
import Link from "next/link"
|
||||||
import { useState } from "react"
|
import { useState } from "react"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import { Category } from "@prisma/client"
|
import { Category } from "@/prisma/client"
|
||||||
import { SelectProps } from "@radix-ui/react-select"
|
import { SelectProps } from "@radix-ui/react-select"
|
||||||
import { useMemo } from "react"
|
import { useMemo } from "react"
|
||||||
import { FormSelect } from "./simple"
|
import { FormSelect } from "./simple"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Project } from "@prisma/client"
|
import { Project } from "@/prisma/client"
|
||||||
import { SelectProps } from "@radix-ui/react-select"
|
import { SelectProps } from "@radix-ui/react-select"
|
||||||
import { FormSelect } from "./simple"
|
import { FormSelect } from "./simple"
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { parseCSVAction, saveTransactionsAction } from "@/app/(app)/import/csv/actions"
|
import { parseCSVAction, saveTransactionsAction } from "@/app/(app)/import/csv/actions"
|
||||||
import { FormError } from "@/components/forms/error"
|
import { FormError } from "@/components/forms/error"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Field } from "@prisma/client"
|
import { Field } from "@/prisma/client"
|
||||||
import { Loader2, Play, Upload } from "lucide-react"
|
import { Loader2, Play, Upload } from "lucide-react"
|
||||||
import { useRouter } from "next/navigation"
|
import { useRouter } from "next/navigation"
|
||||||
import { startTransition, useActionState, useEffect, useState } from "react"
|
import { startTransition, useActionState, useEffect, useState } from "react"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { FormSelectCategory } from "@/components/forms/select-category"
|
|||||||
import { FormSelectCurrency } from "@/components/forms/select-currency"
|
import { FormSelectCurrency } from "@/components/forms/select-currency"
|
||||||
import { FormSelectType } from "@/components/forms/select-type"
|
import { FormSelectType } from "@/components/forms/select-type"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Category, Currency } from "@prisma/client"
|
import { Category, Currency } from "@/prisma/client"
|
||||||
import { CircleCheckBig } from "lucide-react"
|
import { CircleCheckBig } from "lucide-react"
|
||||||
import { useActionState } from "react"
|
import { useActionState } from "react"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { FormError } from "@/components/forms/error"
|
|||||||
import { FormInput, FormTextarea } from "@/components/forms/simple"
|
import { FormInput, FormTextarea } from "@/components/forms/simple"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Card, CardTitle } from "@/components/ui/card"
|
import { Card, CardTitle } from "@/components/ui/card"
|
||||||
import { Field } from "@prisma/client"
|
import { Field } from "@/prisma/client"
|
||||||
import { CircleCheckBig, Edit } from "lucide-react"
|
import { CircleCheckBig, Edit } from "lucide-react"
|
||||||
import Link from "next/link"
|
import Link from "next/link"
|
||||||
import { useActionState } from "react"
|
import { useActionState } from "react"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { saveProfileAction } from "@/app/(app)/settings/actions"
|
|||||||
import { FormError } from "@/components/forms/error"
|
import { FormError } from "@/components/forms/error"
|
||||||
import { FormInput } from "@/components/forms/simple"
|
import { FormInput } from "@/components/forms/simple"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { User } from "@prisma/client"
|
import { User } from "@/prisma/client"
|
||||||
import { CircleCheckBig } from "lucide-react"
|
import { CircleCheckBig } from "lucide-react"
|
||||||
import { useActionState } from "react"
|
import { useActionState } from "react"
|
||||||
import { SubscriptionPlan } from "./subscription-plan"
|
import { SubscriptionPlan } from "./subscription-plan"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { User } from "@prisma/client"
|
import { User } from "@/prisma/client"
|
||||||
|
|
||||||
import { PricingCard } from "@/components/auth/pricing-card"
|
import { PricingCard } from "@/components/auth/pricing-card"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { FormSelectProject } from "@/components/forms/select-project"
|
|||||||
import { FormSelectType } from "@/components/forms/select-type"
|
import { FormSelectType } from "@/components/forms/select-type"
|
||||||
import { FormInput, FormTextarea } from "@/components/forms/simple"
|
import { FormInput, FormTextarea } from "@/components/forms/simple"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Category, Currency, Project } from "@prisma/client"
|
import { Category, Currency, Project } from "@/prisma/client"
|
||||||
import { format } from "date-fns"
|
import { format } from "date-fns"
|
||||||
import { Import, Loader2 } from "lucide-react"
|
import { Import, Loader2 } from "lucide-react"
|
||||||
import Link from "next/link"
|
import Link from "next/link"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { FormSelectProject } from "@/components/forms/select-project"
|
|||||||
import { FormSelectType } from "@/components/forms/select-type"
|
import { FormSelectType } from "@/components/forms/select-type"
|
||||||
import { FormInput, FormTextarea } from "@/components/forms/simple"
|
import { FormInput, FormTextarea } from "@/components/forms/simple"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Category, Currency, Field, Project, Transaction } from "@prisma/client"
|
import { Category, Currency, Field, Project, Transaction } from "@/prisma/client"
|
||||||
import { format } from "date-fns"
|
import { format } from "date-fns"
|
||||||
import { Loader2 } from "lucide-react"
|
import { Loader2 } from "lucide-react"
|
||||||
import { useRouter } from "next/navigation"
|
import { useRouter } from "next/navigation"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import {
|
|||||||
DropdownMenuSeparator,
|
DropdownMenuSeparator,
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from "@/components/ui/dropdown-menu"
|
} from "@/components/ui/dropdown-menu"
|
||||||
import { Field } from "@prisma/client"
|
import { Field } from "@/prisma/client"
|
||||||
import { ColumnsIcon } from "lucide-react"
|
import { ColumnsIcon } from "lucide-react"
|
||||||
import { useRouter } from "next/navigation"
|
import { useRouter } from "next/navigation"
|
||||||
import { useState } from "react"
|
import { useState } from "react"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { Input } from "@/components/ui/input"
|
|||||||
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
|
||||||
import { isFiltered, useTransactionFilters } from "@/hooks/use-transaction-filters"
|
import { isFiltered, useTransactionFilters } from "@/hooks/use-transaction-filters"
|
||||||
import { TransactionFilters } from "@/models/transactions"
|
import { TransactionFilters } from "@/models/transactions"
|
||||||
import { Category, Field, Project } from "@prisma/client"
|
import { Category, Field, Project } from "@/prisma/client"
|
||||||
import { X } from "lucide-react"
|
import { X } from "lucide-react"
|
||||||
|
|
||||||
export function TransactionSearchAndFilters({
|
export function TransactionSearchAndFilters({
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { Checkbox } from "@/components/ui/checkbox"
|
|||||||
import { Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
import { Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
||||||
import { calcTotalPerCurrency } from "@/lib/stats"
|
import { calcTotalPerCurrency } from "@/lib/stats"
|
||||||
import { cn, formatCurrency } from "@/lib/utils"
|
import { cn, formatCurrency } from "@/lib/utils"
|
||||||
import { Category, Field, Project, Transaction } from "@prisma/client"
|
import { Category, Field, Project, Transaction } from "@/prisma/client"
|
||||||
import { formatDate } from "date-fns"
|
import { formatDate } from "date-fns"
|
||||||
import { ArrowDownIcon, ArrowUpIcon, File } from "lucide-react"
|
import { ArrowDownIcon, ArrowUpIcon, File } from "lucide-react"
|
||||||
import { useRouter, useSearchParams } from "next/navigation"
|
import { useRouter, useSearchParams } from "next/navigation"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { FilePreview } from "@/components/files/preview"
|
|||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Card } from "@/components/ui/card"
|
import { Card } from "@/components/ui/card"
|
||||||
import config from "@/lib/config"
|
import config from "@/lib/config"
|
||||||
import { File, Transaction } from "@prisma/client"
|
import { File, Transaction } from "@/prisma/client"
|
||||||
import { Loader2, Upload, X } from "lucide-react"
|
import { Loader2, Upload, X } from "lucide-react"
|
||||||
import { useState } from "react"
|
import { useState } from "react"
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { FormSelectProject } from "@/components/forms/select-project"
|
|||||||
import { FormSelectType } from "@/components/forms/select-type"
|
import { FormSelectType } from "@/components/forms/select-type"
|
||||||
import { FormInput, FormTextarea } from "@/components/forms/simple"
|
import { FormInput, FormTextarea } from "@/components/forms/simple"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Category, Currency, Field, File, Project } from "@prisma/client"
|
import { Category, Currency, Field, File, Project } from "@/prisma/client"
|
||||||
import { format } from "date-fns"
|
import { format } from "date-fns"
|
||||||
import { Brain, Loader2 } from "lucide-react"
|
import { Brain, Loader2 } from "lucide-react"
|
||||||
import { startTransition, useActionState, useMemo, useState } from "react"
|
import { startTransition, useActionState, useMemo, useState } from "react"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import config from "@/lib/config"
|
import config from "@/lib/config"
|
||||||
import { getSelfHostedUser, getUserByEmail, getUserById, SELF_HOSTED_USER } from "@/models/users"
|
import { getSelfHostedUser, getUserByEmail, getUserById, SELF_HOSTED_USER } from "@/models/users"
|
||||||
import { User } from "@prisma/client"
|
import { User } from "@/prisma/client"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
import { prismaAdapter } from "better-auth/adapters/prisma"
|
import { prismaAdapter } from "better-auth/adapters/prisma"
|
||||||
import { APIError } from "better-auth/api"
|
import { APIError } from "better-auth/api"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { PrismaClient } from "@prisma/client"
|
import { PrismaClient } from "@/prisma/client"
|
||||||
|
|
||||||
const globalForPrisma = globalThis as unknown as {
|
const globalForPrisma = globalThis as unknown as {
|
||||||
prisma: PrismaClient | undefined
|
prisma: PrismaClient | undefined
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { File, Transaction, User } from "@prisma/client"
|
import { File, Transaction, User } from "@/prisma/client"
|
||||||
import { access, constants, readdir, stat } from "fs/promises"
|
import { access, constants, readdir, stat } from "fs/promises"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import config from "./config"
|
import config from "./config"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { resizeImage } from "@/lib/previews/images"
|
import { resizeImage } from "@/lib/previews/images"
|
||||||
import { pdfToImages } from "@/lib/previews/pdf"
|
import { pdfToImages } from "@/lib/previews/pdf"
|
||||||
import { User } from "@prisma/client"
|
import { User } from "@/prisma/client"
|
||||||
|
|
||||||
export async function generateFilePreviews(
|
export async function generateFilePreviews(
|
||||||
user: User,
|
user: User,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use server"
|
"use server"
|
||||||
|
|
||||||
import { fileExists, getUserPreviewsDirectory } from "@/lib/files"
|
import { fileExists, getUserPreviewsDirectory } from "@/lib/files"
|
||||||
import { User } from "@prisma/client"
|
import { User } from "@/prisma/client"
|
||||||
import fs from "fs/promises"
|
import fs from "fs/promises"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import sharp from "sharp"
|
import sharp from "sharp"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use server"
|
"use server"
|
||||||
|
|
||||||
import { fileExists, getUserPreviewsDirectory } from "@/lib/files"
|
import { fileExists, getUserPreviewsDirectory } from "@/lib/files"
|
||||||
import { User } from "@prisma/client"
|
import { User } from "@/prisma/client"
|
||||||
import fs from "fs/promises"
|
import fs from "fs/promises"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import { fromPath } from "pdf2pic"
|
import { fromPath } from "pdf2pic"
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { Transaction } from "@prisma/client"
|
import { Transaction } from "@/prisma/client"
|
||||||
|
|
||||||
export function calcTotalPerCurrency(transactions: Transaction[]): Record<string, number> {
|
export function calcTotalPerCurrency(transactions: Transaction[]): Record<string, number> {
|
||||||
return transactions.reduce((acc, transaction) => {
|
return transactions.reduce(
|
||||||
|
(acc, transaction) => {
|
||||||
if (transaction.convertedCurrencyCode) {
|
if (transaction.convertedCurrencyCode) {
|
||||||
acc[transaction.convertedCurrencyCode.toUpperCase()] =
|
acc[transaction.convertedCurrencyCode.toUpperCase()] =
|
||||||
(acc[transaction.convertedCurrencyCode.toUpperCase()] || 0) + (transaction.convertedTotal || 0)
|
(acc[transaction.convertedCurrencyCode.toUpperCase()] || 0) + (transaction.convertedTotal || 0)
|
||||||
@@ -10,5 +11,7 @@ export function calcTotalPerCurrency(transactions: Transaction[]): Record<string
|
|||||||
(acc[transaction.currencyCode.toUpperCase()] || 0) + (transaction.total || 0)
|
(acc[transaction.currencyCode.toUpperCase()] || 0) + (transaction.total || 0)
|
||||||
}
|
}
|
||||||
return acc
|
return acc
|
||||||
}, {} as Record<string, number>)
|
},
|
||||||
|
{} as Record<string, number>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { prisma } from "@/lib/db"
|
import { prisma } from "@/lib/db"
|
||||||
import { codeFromName } from "@/lib/utils"
|
import { codeFromName } from "@/lib/utils"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
import { cache } from "react"
|
import { cache } from "react"
|
||||||
|
|
||||||
export type CategoryData = {
|
export type CategoryData = {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { prisma } from "@/lib/db"
|
import { prisma } from "@/lib/db"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
import { cache } from "react"
|
import { cache } from "react"
|
||||||
|
|
||||||
export const getCurrencies = cache(async (userId: string) => {
|
export const getCurrencies = cache(async (userId: string) => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { prisma } from "@/lib/db"
|
import { prisma } from "@/lib/db"
|
||||||
import { codeFromName } from "@/lib/utils"
|
import { codeFromName } from "@/lib/utils"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
import { cache } from "react"
|
import { cache } from "react"
|
||||||
|
|
||||||
export type FieldData = {
|
export type FieldData = {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { prisma } from "@/lib/db"
|
import { prisma } from "@/lib/db"
|
||||||
import { codeFromName } from "@/lib/utils"
|
import { codeFromName } from "@/lib/utils"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
import { cache } from "react"
|
import { cache } from "react"
|
||||||
|
|
||||||
export type ProjectData = {
|
export type ProjectData = {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { prisma } from "@/lib/db"
|
import { prisma } from "@/lib/db"
|
||||||
import { calcTotalPerCurrency } from "@/lib/stats"
|
import { calcTotalPerCurrency } from "@/lib/stats"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
import { cache } from "react"
|
import { cache } from "react"
|
||||||
import { TransactionFilters } from "./transactions"
|
import { TransactionFilters } from "./transactions"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { prisma } from "@/lib/db"
|
import { prisma } from "@/lib/db"
|
||||||
import { Field, Prisma, Transaction } from "@prisma/client"
|
import { Field, Prisma, Transaction } from "@/prisma/client"
|
||||||
import { cache } from "react"
|
import { cache } from "react"
|
||||||
import { getFields } from "./fields"
|
import { getFields } from "./fields"
|
||||||
import { deleteFile } from "./files"
|
import { deleteFile } from "./files"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { prisma } from "@/lib/db"
|
import { prisma } from "@/lib/db"
|
||||||
import { Prisma } from "@prisma/client"
|
import { Prisma } from "@/prisma/client"
|
||||||
import { cache } from "react"
|
import { cache } from "react"
|
||||||
|
|
||||||
export const SELF_HOSTED_USER = {
|
export const SELF_HOSTED_USER = {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev -p 7331 --turbopack",
|
"dev": "next dev -p 7331 --turbopack",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"start": "prisma migrate deploy && next start",
|
"start": "prisma generate && prisma migrate deploy && next start",
|
||||||
"lint": "next lint"
|
"lint": "next lint"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
generator client {
|
generator client {
|
||||||
provider = "prisma-client-js"
|
provider = "prisma-client-js"
|
||||||
|
output = "client"
|
||||||
}
|
}
|
||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
|
|||||||
Reference in New Issue
Block a user