BudgetBuddyDE

Model

[
  {
    "id": "_pb_users_auth_",
    "name": "users",
    "type": "auth",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "rjhb0esu",
        "name": "name",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "cyraecqh",
        "name": "surname",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "users_avatar",
        "name": "avatar",
        "type": "file",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "mimeTypes": ["image/jpeg", "image/png", "image/svg+xml", "image/gif", "image/webp"],
          "thumbs": null,
          "maxSelect": 1,
          "maxSize": 5242880,
          "protected": false
        }
      },
      {
        "system": false,
        "id": "xgrazjio",
        "name": "newsletter",
        "type": "relation",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "6wnb1i2qb25kj7z",
          "cascadeDelete": false,
          "minSelect": null,
          "maxSelect": null,
          "displayFields": null
        }
      }
    ],
    "indexes": [],
    "listRule": "id = @request.auth.id",
    "viewRule": "id = @request.auth.id",
    "createRule": "",
    "updateRule": "id = @request.auth.id",
    "deleteRule": "id = @request.auth.id",
    "options": {
      "allowEmailAuth": true,
      "allowOAuth2Auth": true,
      "allowUsernameAuth": true,
      "exceptEmailDomains": null,
      "manageRule": null,
      "minPasswordLength": 8,
      "onlyEmailDomains": null,
      "onlyVerified": false,
      "requireEmail": true
    }
  },
  {
    "id": "lz1u22pcdwebexa",
    "name": "budgets",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "h3t9lmnf",
        "name": "owner",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "_pb_users_auth_",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "gamsmrru",
        "name": "category",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "j6e2a0zrnd7d80h",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "g0m3rjyr",
        "name": "budget",
        "type": "number",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "noDecimal": false
        }
      }
    ],
    "indexes": ["CREATE INDEX `idx_5GNpves` ON `budgets` (\n  `owner`,\n  `category`\n)"],
    "listRule": "owner.id = @request.auth.id",
    "viewRule": "owner.id = @request.auth.id",
    "createRule": "",
    "updateRule": "owner.id = @request.auth.id",
    "deleteRule": "owner.id = @request.auth.id",
    "options": {}
  },
  {
    "id": "j6e2a0zrnd7d80h",
    "name": "categories",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "ly0gteeu",
        "name": "owner",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "_pb_users_auth_",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "6lc5tnkv",
        "name": "name",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": 80,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "ymw9gkgj",
        "name": "description",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      }
    ],
    "indexes": ["CREATE UNIQUE INDEX `idx_AaKwX4L` ON `categories` (\n  `owner`,\n  `name`\n)"],
    "listRule": "owner.id = @request.auth.id",
    "viewRule": "owner.id = @request.auth.id",
    "createRule": "",
    "updateRule": "owner.id = @request.auth.id",
    "deleteRule": "owner.id = @request.auth.id",
    "options": {}
  },
  {
    "id": "6wnb1i2qb25kj7z",
    "name": "newsletters",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "h8qpxc5y",
        "name": "enabled",
        "type": "bool",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {}
      },
      {
        "system": false,
        "id": "hv0qasxg",
        "name": "newsletter",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "chqdeby4",
        "name": "name",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "wcqzrvhw",
        "name": "description",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      }
    ],
    "indexes": ["CREATE UNIQUE INDEX `idx_fWBzw2U` ON `newsletters` (`newsletter`)"],
    "listRule": "",
    "viewRule": null,
    "createRule": null,
    "updateRule": null,
    "deleteRule": null,
    "options": {}
  },
  {
    "id": "fl7u8slb64ladln",
    "name": "payment_methods",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "gpi69fir",
        "name": "owner",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "_pb_users_auth_",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "3eanxytq",
        "name": "name",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": 80,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "tcs9zxse",
        "name": "provider",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": 100,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "xuraqcwj",
        "name": "address",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": 100,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "hugvhogo",
        "name": "description",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      }
    ],
    "indexes": [
      "CREATE INDEX `idx_n0yprOz` ON `payment_methods` (\n  `owner`,\n  `name`,\n  `provider`,\n  `address`\n)"
    ],
    "listRule": "owner.id = @request.auth.id",
    "viewRule": "owner.id = @request.auth.id",
    "createRule": "",
    "updateRule": "owner.id = @request.auth.id",
    "deleteRule": "owner.id = @request.auth.id",
    "options": {}
  },
  {
    "id": "6ta4u8u5rppdqfh",
    "name": "stock_exchanges",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "fvipty3s",
        "name": "name",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "1wozyzlx",
        "name": "symbol",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "vmqvu38t",
        "name": "exchange",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": null,
          "pattern": ""
        }
      }
    ],
    "indexes": [
      "CREATE UNIQUE INDEX `idx_9A7KSfy` ON `stock_exchanges` (\n  `symbol`,\n  `exchange`\n)"
    ],
    "listRule": "",
    "viewRule": "",
    "createRule": null,
    "updateRule": null,
    "deleteRule": null,
    "options": {}
  },
  {
    "id": "wtlidhxowydwwu0",
    "name": "stock_positions",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "yurv50er",
        "name": "owner",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "_pb_users_auth_",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "drowmjox",
        "name": "exchange",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "6ta4u8u5rppdqfh",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "o2ma5xlz",
        "name": "bought_at",
        "type": "date",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": "",
          "max": ""
        }
      },
      {
        "system": false,
        "id": "njwsfrn3",
        "name": "isin",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 12,
          "max": 12,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "uscmrh5g",
        "name": "buy_in",
        "type": "number",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "noDecimal": false
        }
      },
      {
        "system": false,
        "id": "etgj13bd",
        "name": "currency",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 3,
          "max": 3,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "nvmqgabg",
        "name": "quantity",
        "type": "number",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "noDecimal": false
        }
      }
    ],
    "indexes": [],
    "listRule": "owner.id = @request.auth.id",
    "viewRule": "owner.id = @request.auth.id",
    "createRule": "",
    "updateRule": "owner.id = @request.auth.id",
    "deleteRule": "owner.id = @request.auth.id",
    "options": {}
  },
  {
    "id": "lk1ilondt89zy5b",
    "name": "stock_watchlists",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "ygzsoywu",
        "name": "owner",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "_pb_users_auth_",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "qbswq130",
        "name": "exchange",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "6ta4u8u5rppdqfh",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "jnizvevy",
        "name": "isin",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 12,
          "max": 12,
          "pattern": ""
        }
      }
    ],
    "indexes": [
      "CREATE INDEX `idx_dPlOU1z` ON `stock_watchlists` (\n  `owner`,\n  `exchange`,\n  `isin`\n)"
    ],
    "listRule": "owner.id = @request.auth.id",
    "viewRule": "owner.id = @request.auth.id",
    "createRule": "",
    "updateRule": "owner.id = @request.auth.id",
    "deleteRule": "owner.id = @request.auth.id",
    "options": {}
  },
  {
    "id": "aijo6z3zdlm8ppw",
    "name": "subscriptions",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "i94iviym",
        "name": "owner",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "_pb_users_auth_",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "qvniyu8q",
        "name": "category",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "j6e2a0zrnd7d80h",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "9jgaowyp",
        "name": "payment_method",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "fl7u8slb64ladln",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "fgn6wxy9",
        "name": "paused",
        "type": "bool",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {}
      },
      {
        "system": false,
        "id": "b5hoz2n8",
        "name": "execute_at",
        "type": "number",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": 31,
          "noDecimal": true
        }
      },
      {
        "system": false,
        "id": "xibaelft",
        "name": "receiver",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": 100,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "htzsfkkz",
        "name": "information",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "xub5erzz",
        "name": "transfer_amount",
        "type": "number",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "noDecimal": false
        }
      }
    ],
    "indexes": [],
    "listRule": "owner.id = @request.auth.id",
    "viewRule": "owner.id = @request.auth.id",
    "createRule": "",
    "updateRule": "owner.id = @request.auth.id",
    "deleteRule": "owner.id = @request.auth.id",
    "options": {}
  },
  {
    "id": "ql29ez1qvq77mvz",
    "name": "transactions",
    "type": "base",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "k62cdtun",
        "name": "owner",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "_pb_users_auth_",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "hsxpvazn",
        "name": "category",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "j6e2a0zrnd7d80h",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "jpmd1owh",
        "name": "payment_method",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "fl7u8slb64ladln",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      },
      {
        "system": false,
        "id": "eb6hjfca",
        "name": "processed_at",
        "type": "date",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": "",
          "max": ""
        }
      },
      {
        "system": false,
        "id": "bvxh86m2",
        "name": "receiver",
        "type": "text",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "min": 1,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "9sa8uf09",
        "name": "information",
        "type": "text",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "pattern": ""
        }
      },
      {
        "system": false,
        "id": "hkcql2lw",
        "name": "transfer_amount",
        "type": "number",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "min": null,
          "max": null,
          "noDecimal": false
        }
      },
      {
        "system": false,
        "id": "xslwzukn",
        "name": "attachments",
        "type": "file",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "mimeTypes": ["application/pdf", "image/jpeg", "image/png", "image/vnd.mozilla.apng"],
          "thumbs": [],
          "maxSelect": 99,
          "maxSize": 10485760,
          "protected": true
        }
      }
    ],
    "indexes": [],
    "listRule": "owner.id = @request.auth.id",
    "viewRule": "owner.id = @request.auth.id",
    "createRule": "",
    "updateRule": "owner.id = @request.auth.id",
    "deleteRule": "owner.id = @request.auth.id",
    "options": {}
  },
  {
    "id": "9rn6pzsmgwqku5u",
    "name": "v_monthly_balances",
    "type": "view",
    "system": false,
    "schema": [
      {
        "system": false,
        "id": "2ezuysf9",
        "name": "date",
        "type": "json",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "maxSize": 1
        }
      },
      {
        "system": false,
        "id": "kcgjsums",
        "name": "balance",
        "type": "json",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "maxSize": 1
        }
      },
      {
        "system": false,
        "id": "fp37ovg4",
        "name": "income",
        "type": "json",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "maxSize": 1
        }
      },
      {
        "system": false,
        "id": "qm95pqyh",
        "name": "expenses",
        "type": "json",
        "required": false,
        "presentable": false,
        "unique": false,
        "options": {
          "maxSize": 1
        }
      },
      {
        "system": false,
        "id": "bqsgu0ar",
        "name": "owner",
        "type": "relation",
        "required": true,
        "presentable": false,
        "unique": false,
        "options": {
          "collectionId": "_pb_users_auth_",
          "cascadeDelete": true,
          "minSelect": null,
          "maxSelect": 1,
          "displayFields": null
        }
      }
    ],
    "indexes": [],
    "listRule": "owner = @request.auth.id",
    "viewRule": "owner = @request.auth.id",
    "createRule": null,
    "updateRule": null,
    "deleteRule": null,
    "options": {
      "query": "SELECT \n  (ROW_NUMBER() OVER()) AS id,\n  strftime('%Y-%m',transactions.processed_at) AS date,\n  SUM(transactions.transfer_amount) AS balance,\n  SUM(CASE WHEN transactions.transfer_amount > 0 THEN transactions.transfer_amount ELSE 0 END) AS income,\n  SUM(CASE WHEN transactions.transfer_amount < 0 THEN ABS(transactions.transfer_amount) ELSE 0 END) AS expenses,\n  transactions.owner\nFROM transactions\nWHERE transactions.processed_at <= CURRENT_TIMESTAMP\nGROUP BY strftime('%Y-%m',transactions.processed_at), transactions.owner\nORDER BY transactions.processed_at DESC;"
    }
  }
]