Files
FEDEO/test/bankImport/index.mjs
2024-02-19 07:46:28 +01:00

169 lines
5.1 KiB
JavaScript

import axios from "axios"
import {createClient} from "@supabase/supabase-js";
let key = process.env.SUPABASE_SERVICE_ROLE_KEY
let url = process.env.SUPABASE_URL
let interval = process.env.INTERVAL
let goCardLessBaseUrl = process.env.GOCARDLESS_URL
let goCardLessSecretId = process.env.GOCARDLESS_SECRET_ID
let goCardLessSecretKey = process.env.GOCARDLESS_SECRET_KEY
const supabase = createClient(url,key)
let accessToken = ""
let refreshToken = ""
console.log(goCardLessBaseUrl)
let currentTenant = 1
let tenantData = (await supabase.from("tenants").select().eq("id", currentTenant)).data[0]
//console.log(tenantData)
let bankConfig = tenantData.bankConfig
//console.log(bankConfig)
//console.log(goCardLessBaseUrl + "token/new/")
let tokenData = (await axios({
url: goCardLessBaseUrl + "token/new/",
method: "POST",
data: {
"secret_id": goCardLessSecretId,
"secret_key": goCardLessSecretKey
}
})).data
accessToken = tokenData.access
refreshToken = tokenData.access
let accounts = []
const getAccounts = async () => {
let existingAccounts = (await supabase.from("bankAccounts").select()).data
let requisitionData = (await axios({
url: goCardLessBaseUrl + "requisitions/" + bankConfig.requisitions[0],
headers: {
Authorization: `Bearer ${accessToken}`
},
method: "GET",
})).data
requisitionData.accounts.forEach(account => {
if (!accounts.includes(account)) {
accounts.push(account)
}
})
let supabaseAccountInserts = []
async function getAccountData () {
await Promise.all(accounts.map(async (account) => {
let accountData = (await axios({
url: goCardLessBaseUrl + "accounts/" + account,
headers: {
Authorization: `Bearer ${accessToken}`
},
method: "GET"
})).data
//console.log(accountData)
if(existingAccounts.filter(account => account.iban === accountData.iban).length === 0){
supabaseAccountInserts.push({
name: "",
iban: accountData.iban,
bankId: accountData.institution_id,
ownerName: accountData.owner_name,
tenant: currentTenant,
accountId: accountData.id
})
}
}));
}
await getAccountData()
//console.log("Start Insert")
const {data:accountInsertData,error:accountInsertError} = await supabase.from("bankAccounts").insert(supabaseAccountInserts).select()
if(accountInsertError) {
console.log(accountInsertError)
} else if(accountInsertData) {
//console.log(accountInsertData)
}
}
const getTransactions = async () => {
let accountsToRequest = (await supabase.from("bankAccounts").select().eq("used", true)).data
let existingTransactions = (await supabase.from("bankStatements").select().eq("tenant", currentTenant)).data
console.log(accountsToRequest)
let supabaseTransactionInserts = []
async function getAccountTransactions () {
await Promise.all(accountsToRequest.map(async (account) => {
let transactions = (await axios({
url: goCardLessBaseUrl + "accounts/" + account.accountId + "/transactions",
headers: {
Authorization: `Bearer ${accessToken}`
},
method: "GET"
})).data.transactions.booked
//console.log(transactions)
transactions.forEach(transaction => {
if(!transaction.creditorAccount) console.log(transaction)
let transactionData = {
date: transaction.bookingDate,
amount: transaction.transactionAmount.amount,
credName: transaction.creditorName ? transaction.creditorName : null,
credIban: transaction.creditorAccount ? transaction.creditorAccount.iban : null,
debName: transaction.debtorName,
debIban: transaction.debtorAccount.iban,
text: transaction.remittanceInformationUnstructured,
gocardlessId: transaction.internalTransactionId,
currency: transaction.transactionAmount.currency,
account: account.id,
tenant: currentTenant
}
if(existingTransactions.filter(item => item.gocardlessId === transaction.internalTransactionId).length === 0){
supabaseTransactionInserts.push(transactionData)
}
})
}));
}
await getAccountTransactions()
console.log(supabaseTransactionInserts)
const {data:transactionInsertData, error:transactionInsertError} = await supabase.from("bankStatements").insert(supabaseTransactionInserts).select()
if(transactionInsertError) {
console.log(transactionInsertError)
} else if(transactionInsertData) {
console.log(transactionInsertData)
}
}
getAccounts()
getTransactions()