diff --git a/src/app/pages/expenses/expense-page.component.scss b/src/app/pages/expenses/expense-page.component.scss
index b35508b..30bf02c 100644
--- a/src/app/pages/expenses/expense-page.component.scss
+++ b/src/app/pages/expenses/expense-page.component.scss
@@ -1,4 +1,4 @@
-.expenses-container {
+.expenses-page-container {
display: flex;
flex-direction: column;
gap: 1rem;
diff --git a/src/app/pages/expenses/expense-page.component.ts b/src/app/pages/expenses/expense-page.component.ts
index 18f24e0..542a3fc 100644
--- a/src/app/pages/expenses/expense-page.component.ts
+++ b/src/app/pages/expenses/expense-page.component.ts
@@ -3,7 +3,7 @@ import { ExpenseListComponent } from '../../components/expense-list/expense-list
import { ExpenseComponent } from '../../components/expense/expense.component';
@Component({
- selector: 'app-expenses',
+ selector: 'app-expenses-page',
imports: [
ExpenseListComponent,
ExpenseComponent
diff --git a/src/app/pages/home/home-page.component.html b/src/app/pages/home/home-page.component.html
index 94c5c02..19cf282 100644
--- a/src/app/pages/home/home-page.component.html
+++ b/src/app/pages/home/home-page.component.html
@@ -1,7 +1,3 @@
-
-
+
+
The common sense expense tracker.
diff --git a/src/app/pages/home/home-page.component.scss b/src/app/pages/home/home-page.component.scss
index e69de29..0fcfa03 100644
--- a/src/app/pages/home/home-page.component.scss
+++ b/src/app/pages/home/home-page.component.scss
@@ -0,0 +1,7 @@
+h2 {
+ font-size: 1.3rem;
+ line-height: 100%;
+ font-weight: 500;
+ margin: 0;
+ font-family: sans-serif;
+}
diff --git a/src/app/pages/home/home-page.component.ts b/src/app/pages/home/home-page.component.ts
index 724172f..e9a654d 100644
--- a/src/app/pages/home/home-page.component.ts
+++ b/src/app/pages/home/home-page.component.ts
@@ -1,12 +1,9 @@
import { Component } from '@angular/core';
-import { RouterLink } from '@angular/router';
@Component({
- selector: 'app-home',
- imports: [
- RouterLink
- ],
+ selector: 'app-home-page',
+ imports: [],
templateUrl: './home-page.component.html',
- styleUrl: './home-page.component.scss',
+ styleUrl: './home-page.component.scss'
})
export class HomePage { }
diff --git a/src/app/pages/metadata/metadata-page.component.html b/src/app/pages/metadata/metadata-page.component.html
new file mode 100644
index 0000000..61dae30
--- /dev/null
+++ b/src/app/pages/metadata/metadata-page.component.html
@@ -0,0 +1,3 @@
+
diff --git a/src/app/pages/metadata/metadata-page.component.scss b/src/app/pages/metadata/metadata-page.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/pages/metadata/metadata-page.component.ts b/src/app/pages/metadata/metadata-page.component.ts
new file mode 100644
index 0000000..418c735
--- /dev/null
+++ b/src/app/pages/metadata/metadata-page.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+import { MetadataComponent } from '../../components/metadata/metadata.component';
+
+@Component({
+ selector: 'app-metadata-page',
+ imports: [
+ MetadataComponent
+ ],
+ templateUrl: './metadata-page.component.html',
+ styleUrl: './metadata-page.component.scss'
+})
+export class MetadataPageComponent { }
diff --git a/src/app/pages/reports/reports-page.component.html b/src/app/pages/reports/reports-page.component.html
new file mode 100644
index 0000000..cbc6bbb
--- /dev/null
+++ b/src/app/pages/reports/reports-page.component.html
@@ -0,0 +1,3 @@
+
+ Reports page
+
diff --git a/src/app/pages/reports/reports-page.component.scss b/src/app/pages/reports/reports-page.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/pages/reports/reports-page.component.ts b/src/app/pages/reports/reports-page.component.ts
new file mode 100644
index 0000000..e0fc9e4
--- /dev/null
+++ b/src/app/pages/reports/reports-page.component.ts
@@ -0,0 +1,9 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-reports-page',
+ imports: [],
+ templateUrl: './reports-page.component.html',
+ styleUrl: './reports-page.component.scss'
+})
+export class ReportsPageComponent { }
diff --git a/src/app/services/category.service.ts b/src/app/services/category.service.ts
index 9c2da93..b1b4ac3 100644
--- a/src/app/services/category.service.ts
+++ b/src/app/services/category.service.ts
@@ -10,15 +10,27 @@ export class CategoryService {
public readonly categoryPath = 'http://localhost:3000/common-cents/categories';
public constructor(private readonly http: HttpService) {
- void this.fetchCategories();
+ void this.fetch();
}
- public async fetchCategories(): Promise
{
+ public async fetch(): Promise {
this.internalCategories.set(await this.http.get(this.categoryPath));
}
+
+ public async create(category: CreateCategory): Promise {
+ return await this.http.post(this.categoryPath, category);
+ }
+
+ public async update(category: Category): Promise {
+ return await this.http.put(this.categoryPath, category);
+ }
}
export interface Category {
id: string;
name: string;
}
+
+export interface CreateCategory {
+ name: string;
+}
diff --git a/src/app/services/expense.service.ts b/src/app/services/expense.service.ts
index 243c53b..0ca6ff7 100644
--- a/src/app/services/expense.service.ts
+++ b/src/app/services/expense.service.ts
@@ -14,21 +14,18 @@ export class ExpenseService {
public readonly expensePath = 'http://localhost:3000/common-cents/expenses'; // TODO: refactor
public constructor(private readonly http: HttpService) {
- void this.fetchExpenses();
+ void this.fetch();
}
- public async fetchExpenses(): Promise {
+ public async fetch(): Promise {
this.internalExpenses.set(await this.http.get(this.expensePath));
}
- public async postExpense(createExpense: CreateExpense): Promise {
- const createdExpense = await this.http.post(this.expensePath, createExpense);
- await this.fetchExpenses();
-
- return createdExpense;
+ public async create(createExpense: CreateExpense): Promise {
+ return await this.http.post(this.expensePath, createExpense);
}
- public async updateExpense(updateExpense: UpdateExpense): Promise {
+ public async update(updateExpense: UpdateExpense): Promise {
return await this.http.put(this.expensePath, updateExpense);
}
}
@@ -38,18 +35,18 @@ export interface Expense {
date: Date;
cents: number;
category: Category;
- note?: string;
merchant?: Merchant;
+ note?: string;
tags: Tag[];
}
export interface CreateExpense {
date: Temporal.PlainDate;
cents: number;
- categoryId: string;
+ category: Category;
+ merchant?: Merchant;
note?: string;
- merchantId?: string;
- tagIds?: string[];
+ tags: Tag[];
}
export interface UpdateExpense extends CreateExpense {
diff --git a/src/app/services/merchant.service.ts b/src/app/services/merchant.service.ts
index 8cca35b..1d0290b 100644
--- a/src/app/services/merchant.service.ts
+++ b/src/app/services/merchant.service.ts
@@ -10,15 +10,27 @@ export class MerchantService {
public readonly merchantPath = 'http://localhost:3000/common-cents/merchants';
public constructor(private readonly http: HttpService) {
- void this.fetchMerchants();
+ void this.fetch();
}
- public async fetchMerchants(): Promise {
+ public async fetch(): Promise {
this.internalMerchants.set(await this.http.get(this.merchantPath));
}
+
+ public async create(merchant: CreateMerchant): Promise {
+ return await this.http.post(this.merchantPath, merchant);
+ }
+
+ public async update(merchant: Merchant): Promise {
+ return await this.http.put(this.merchantPath, merchant);
+ }
}
export interface Merchant {
id: string;
name: string;
}
+
+export interface CreateMerchant {
+ name: string;
+}
diff --git a/src/app/services/tag.service.ts b/src/app/services/tag.service.ts
index 06a373b..c23ccab 100644
--- a/src/app/services/tag.service.ts
+++ b/src/app/services/tag.service.ts
@@ -10,15 +10,27 @@ export class TagService {
public readonly tagPath = 'http://localhost:3000/common-cents/tags';
public constructor(private readonly http: HttpService) {
- void this.fetchTags();
+ void this.fetch();
}
- public async fetchTags(): Promise {
+ public async fetch(): Promise {
this.internalTags.set(await this.http.get(this.tagPath));
}
+
+ public async create(tag: CreateTag): Promise {
+ return await this.http.post(this.tagPath, tag);
+ }
+
+ public async update(tag: Tag): Promise {
+ return await this.http.put(this.tagPath, tag);
+ }
}
export interface Tag {
id: string;
name: string;
}
+
+export interface CreateTag {
+ name: string;
+}
diff --git a/src/assets/styles/variables.scss b/src/assets/styles/variables.scss
new file mode 100644
index 0000000..7d6130d
--- /dev/null
+++ b/src/assets/styles/variables.scss
@@ -0,0 +1,2 @@
+$mid-screen: 500px;
+$wide-screen: 800px;
diff --git a/src/index.html b/src/index.html
index 66e56cd..9dbd9e8 100644
--- a/src/index.html
+++ b/src/index.html
@@ -13,7 +13,7 @@
-
+
diff --git a/src/styles.scss b/src/styles.scss
index ac47f6e..fe32d0a 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -10,7 +10,7 @@ html {
height: 100%;
@include mat.theme((
color: (
- primary: mat.$cyan-palette,
+ primary: mat.$azure-palette,
tertiary: mat.$orange-palette,
),
typography: Roboto,