diff --git a/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.html b/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.html new file mode 100644 index 00000000..c7871f55 --- /dev/null +++ b/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.html @@ -0,0 +1,6 @@ + + + + + +
{{ budget.name }}{{ budget.amount }}
diff --git a/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.ts b/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.ts new file mode 100644 index 00000000..3babe339 --- /dev/null +++ b/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.ts @@ -0,0 +1,10 @@ +import { Component, Input, Signal } from '@angular/core'; +import { Budget } from '../../models/budget.model'; + +@Component({ + selector: 'app-budget-table', + templateUrl: './budget-table.component.html', +}) +export class BudgetTableComponent { + @Input() budgets!: Signal; +} diff --git a/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.html b/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.html new file mode 100644 index 00000000..389591de --- /dev/null +++ b/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.ts b/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.ts new file mode 100644 index 00000000..f4347eb0 --- /dev/null +++ b/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.ts @@ -0,0 +1,31 @@ +import { Component, inject, signal, computed, effect } from '@angular/core'; +import { BudgetService } from '../../services/budget.service'; +import { Budget } from '../../models/budget.model'; + +@Component({ + selector: 'app-select-budget-page', + templateUrl: './select-budget-page.component.html', +}) +export class SelectBudgetPageComponent { + private budgetService = inject(BudgetService); + + allBudgets = signal([]); + selectedBudgetId = signal(null); + + overview = computed(() => + this.allBudgets().find(b => b.id === this.selectedBudgetId()) + ); + + constructor() { + this.loadBudgets(); + } + + loadBudgets() { + this.budgetService.getBudgets().subscribe(budgets => this.allBudgets.set(budgets)); + } + + selectBudget(budgetId: string) { + this.selectedBudgetId.set(budgetId); + } +} + diff --git a/libs/model/budgetting/budget-notes/src/lib/domain/add-note.command.ts b/libs/model/budgetting/budget-notes/src/lib/domain/add-note.command.ts new file mode 100644 index 00000000..b1cffa49 --- /dev/null +++ b/libs/model/budgetting/budget-notes/src/lib/domain/add-note.command.ts @@ -0,0 +1,7 @@ +export class AddNoteToBudgetCommand { + constructor( + public readonly budgetId: string, + public readonly content: string, + public readonly createdBy: string, + ) {} +} diff --git a/libs/model/budgetting/budget-notes/src/lib/domain/add-note.handler.ts b/libs/model/budgetting/budget-notes/src/lib/domain/add-note.handler.ts new file mode 100644 index 00000000..1820b78c --- /dev/null +++ b/libs/model/budgetting/budget-notes/src/lib/domain/add-note.handler.ts @@ -0,0 +1,25 @@ +import { AddNoteToBudgetCommand } from './add-note.command'; +import { FunctionHandler } from '@ngfire/functions'; + +export interface ICommandHandler { + execute(command: TCommand): Promise; +} + +export class AddNoteToBudgetHandler implements FunctionHandler, ICommandHandler { + async execute(command: AddNoteToBudgetCommand): Promise { + if (!command.content || !command.budgetId) { + throw new Error('Budget ID and content are required'); + } + + const repo = this.getRepository(); + await repo.addNote(command.budgetId, command.content, command.createdBy); + } + + private getRepository() { + return { + addNote: async (budgetId: string, content: string, createdBy: string) => { + // logic to persist the note + } + }; + } +}