Skip to content

Commit

Permalink
Fix types
Browse files Browse the repository at this point in the history
  • Loading branch information
joel-jeremy committed Mar 4, 2025
1 parent 51b27e0 commit cb9a201
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 23 deletions.
21 changes: 14 additions & 7 deletions packages/loot-core/src/server/budget/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ async function createCategory({
hidden,
}: {
name: string;
groupId: number;
groupId: CategoryGroupEntity['id'];
isIncome?: boolean;
hidden?: boolean;
}): Promise<CategoryEntity['id']> {
Expand All @@ -272,10 +272,12 @@ async function updateCategory(
category: CategoryEntity,
): Promise<{ error?: { type: 'category-exists' } }> {
try {
await db.updateCategory({
...category,
name: category.name.trim(),
});
await db.updateCategory(
categoryModel.toDb({
...category,
name: category.name.trim(),
}),
);
} catch (e) {
if (
e instanceof Error &&
Expand Down Expand Up @@ -330,7 +332,12 @@ async function deleteCategory({
if (!row || (transferId && !transfer)) {
result = { error: 'no-categories' };
return;
} else if (transferId && row.is_income !== transfer.is_income) {
} else if (
transferId &&
row &&
transfer &&
row.is_income !== transfer.is_income
) {
result = { error: 'category-type' };
return;
}
Expand Down Expand Up @@ -372,7 +379,7 @@ async function createCategoryGroup({
}

async function updateCategoryGroup(group: CategoryGroupEntity) {
await db.updateCategoryGroup(group);
await db.updateCategoryGroup(categoryGroupModel.toDb(group));
}

async function moveCategoryGroup({
Expand Down
28 changes: 21 additions & 7 deletions packages/loot-core/src/server/db/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import * as fs from '../../platform/server/fs';
import * as sqlite from '../../platform/server/sqlite';
import * as monthUtils from '../../shared/months';
import { groupById } from '../../shared/util';
import { WithRequired } from '../../types/util';
import {
schema,
schemaConfig,
Expand Down Expand Up @@ -347,7 +348,7 @@ export async function getCategoriesGrouped(
}

export async function insertCategoryGroup(
group,
group: WithRequired<Partial<DbCategoryGroup>, 'name'>,
): Promise<DbCategoryGroup['id']> {
// Don't allow duplicate group
const existingGroup = await first<
Expand Down Expand Up @@ -378,12 +379,17 @@ export async function insertCategoryGroup(
return id;
}

export function updateCategoryGroup(group) {
export function updateCategoryGroup(
group: WithRequired<Partial<DbCategoryGroup>, 'name' | 'is_income'>,
) {
group = categoryGroupModel.validate(group, { update: true });
return update('category_groups', group);
}

export async function moveCategoryGroup(id, targetId) {
export async function moveCategoryGroup(
id: DbCategoryGroup['id'],
targetId: DbCategoryGroup['id'],
) {
const groups = await all(
`SELECT id, sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order, id`,
);
Expand All @@ -395,7 +401,10 @@ export async function moveCategoryGroup(id, targetId) {
await update('category_groups', { id, sort_order });
}

export async function deleteCategoryGroup(group, transferId?: string) {
export async function deleteCategoryGroup(
group: Pick<DbCategoryGroup, 'id'>,
transferId?: string,
) {
const categories = await all('SELECT * FROM categories WHERE cat_group = ?', [
group.id,
]);
Expand All @@ -406,8 +415,8 @@ export async function deleteCategoryGroup(group, transferId?: string) {
}

export async function insertCategory(
category,
{ atEnd } = { atEnd: undefined },
category: WithRequired<Partial<DbCategory>, 'name' | 'cat_group'>,
{ atEnd }: { atEnd?: boolean | undefined } = { atEnd: undefined },
): Promise<DbCategory['id']> {
let sort_order;

Expand Down Expand Up @@ -460,7 +469,12 @@ export async function insertCategory(
return id_;
}

export function updateCategory(category) {
export function updateCategory(
category: WithRequired<
Partial<DbCategory>,
'name' | 'is_income' | 'cat_group'
>,
) {
category = categoryModel.validate(category, { update: true });
return update('categories', category);
}
Expand Down
23 changes: 14 additions & 9 deletions packages/loot-core/src/server/models.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {
AccountEntity,
CategoryEntity,
CategoryGroupEntity,
PayeeEntity,
Expand All @@ -12,7 +11,7 @@ import {
schema,
schemaConfig,
} from './aql';
import { DbCategory, DbCategoryGroup } from './db';
import { DbAccount, DbCategory, DbCategoryGroup } from './db';
import { ValidationError } from './errors';

export function requiredFields<T extends object, K extends keyof T>(
Expand Down Expand Up @@ -58,20 +57,26 @@ export function fromDateRepr(number: number) {
}

export const accountModel = {
validate(account: AccountEntity, { update }: { update?: boolean } = {}) {
validate(
account: Partial<DbAccount>,
{ update }: { update?: boolean } = {},
): DbAccount {
requiredFields(
'account',
account,
update ? ['name', 'offbudget', 'closed'] : ['name'],
update,
);

return account;
return account as DbAccount;
},
};

export const categoryModel = {
validate(category: CategoryEntity, { update }: { update?: boolean } = {}) {
validate(
category: Partial<DbCategory>,
{ update }: { update?: boolean } = {},
): DbCategory {
requiredFields(
'category',
category,
Expand All @@ -80,7 +85,7 @@ export const categoryModel = {
);

const { sort_order, ...rest } = category;
return { ...rest, hidden: rest.hidden ? 1 : 0 };
return { ...rest } as DbCategory;
},
toDb(
category: CategoryEntity,
Expand All @@ -104,9 +109,9 @@ export const categoryModel = {

export const categoryGroupModel = {
validate(
categoryGroup: CategoryGroupEntity,
categoryGroup: Partial<DbCategoryGroup>,
{ update }: { update?: boolean } = {},
) {
): DbCategoryGroup {
requiredFields(
'categoryGroup',
categoryGroup,
Expand All @@ -115,7 +120,7 @@ export const categoryGroupModel = {
);

const { sort_order, ...rest } = categoryGroup;
return { ...rest, hidden: rest.hidden ? 1 : 0 };
return { ...rest } as DbCategoryGroup;
},
toDb(
categoryGroup: CategoryGroupEntity,
Expand Down

0 comments on commit cb9a201

Please sign in to comment.