Refactored account ordering according to latest account history updates.
This commit is contained in:
parent
e0e73cddae
commit
ca85ab9893
|
@ -1,9 +1,8 @@
|
||||||
package com.andrewlalis.perfin.control;
|
package com.andrewlalis.perfin.control;
|
||||||
|
|
||||||
import com.andrewlalis.javafx_scene_router.RouteSelectionListener;
|
import com.andrewlalis.javafx_scene_router.RouteSelectionListener;
|
||||||
import com.andrewlalis.perfin.data.pagination.PageRequest;
|
|
||||||
import com.andrewlalis.perfin.data.pagination.Sort;
|
|
||||||
import com.andrewlalis.perfin.data.util.CurrencyUtil;
|
import com.andrewlalis.perfin.data.util.CurrencyUtil;
|
||||||
|
import com.andrewlalis.perfin.model.Account;
|
||||||
import com.andrewlalis.perfin.model.MoneyValue;
|
import com.andrewlalis.perfin.model.MoneyValue;
|
||||||
import com.andrewlalis.perfin.model.Profile;
|
import com.andrewlalis.perfin.model.Profile;
|
||||||
import com.andrewlalis.perfin.view.component.AccountTile;
|
import com.andrewlalis.perfin.view.component.AccountTile;
|
||||||
|
@ -14,6 +13,8 @@ import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.layout.FlowPane;
|
import javafx.scene.layout.FlowPane;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static com.andrewlalis.perfin.PerfinApp.router;
|
import static com.andrewlalis.perfin.PerfinApp.router;
|
||||||
|
|
||||||
public class AccountsViewController implements RouteSelectionListener {
|
public class AccountsViewController implements RouteSelectionListener {
|
||||||
|
@ -47,14 +48,14 @@ public class AccountsViewController implements RouteSelectionListener {
|
||||||
|
|
||||||
public void refreshAccounts() {
|
public void refreshAccounts() {
|
||||||
Profile.whenLoaded(profile -> {
|
Profile.whenLoaded(profile -> {
|
||||||
Thread.ofVirtual().start(() -> {
|
Thread.ofVirtual().start(() -> profile.getDataSource().useAccountRepository(repo -> {
|
||||||
profile.getDataSource().useAccountRepository(repo -> {
|
List<Account> accounts = repo.findAllOrderedByRecentHistory();
|
||||||
var page = repo.findAll(PageRequest.unpaged(Sort.asc("created_at")));
|
Platform.runLater(() -> accountsPane.getChildren()
|
||||||
Platform.runLater(() -> {
|
.setAll(accounts.stream()
|
||||||
accountsPane.getChildren().setAll(page.items().stream().map(AccountTile::new).toList());
|
.map(AccountTile::new)
|
||||||
});
|
.toList()
|
||||||
});
|
));
|
||||||
});
|
}));
|
||||||
// Compute grand totals!
|
// Compute grand totals!
|
||||||
Thread.ofVirtual().start(() -> {
|
Thread.ofVirtual().start(() -> {
|
||||||
var totals = profile.getDataSource().getCombinedAccountBalances();
|
var totals = profile.getDataSource().getCombinedAccountBalances();
|
||||||
|
|
|
@ -16,6 +16,7 @@ import java.util.Set;
|
||||||
public interface AccountRepository extends AutoCloseable {
|
public interface AccountRepository extends AutoCloseable {
|
||||||
long insert(AccountType type, String accountNumber, String name, Currency currency);
|
long insert(AccountType type, String accountNumber, String name, Currency currency);
|
||||||
Page<Account> findAll(PageRequest pagination);
|
Page<Account> findAll(PageRequest pagination);
|
||||||
|
List<Account> findAllOrderedByRecentHistory();
|
||||||
List<Account> findAllByCurrency(Currency currency);
|
List<Account> findAllByCurrency(Currency currency);
|
||||||
Optional<Account> findById(long id);
|
Optional<Account> findById(long id);
|
||||||
void updateName(long id, String name);
|
void updateName(long id, String name);
|
||||||
|
|
|
@ -46,6 +46,19 @@ public record JdbcAccountRepository(Connection conn) implements AccountRepositor
|
||||||
return DbUtil.findAll(conn, "SELECT * FROM account WHERE NOT archived", pagination, JdbcAccountRepository::parseAccount);
|
return DbUtil.findAll(conn, "SELECT * FROM account WHERE NOT archived", pagination, JdbcAccountRepository::parseAccount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Account> findAllOrderedByRecentHistory() {
|
||||||
|
return DbUtil.findAll(
|
||||||
|
conn,
|
||||||
|
"""
|
||||||
|
SELECT DISTINCT ON (account.id) account.*, ahi.timestamp AS _
|
||||||
|
FROM account
|
||||||
|
LEFT OUTER JOIN account_history_item ahi ON ahi.account_id = account.id
|
||||||
|
ORDER BY ahi.timestamp DESC, account.created_at DESC""",
|
||||||
|
JdbcAccountRepository::parseAccount
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Account> findAllByCurrency(Currency currency) {
|
public List<Account> findAllByCurrency(Currency currency) {
|
||||||
return DbUtil.findAll(
|
return DbUtil.findAll(
|
||||||
|
|
|
@ -38,9 +38,6 @@ public class AccountTile extends BorderPane {
|
||||||
-fx-padding: 5px;
|
-fx-padding: 5px;
|
||||||
-fx-cursor: hand;
|
-fx-cursor: hand;
|
||||||
""");
|
""");
|
||||||
final Color color = ACCOUNT_TYPE_COLORS.get(account.getType());
|
|
||||||
// var fill = new BackgroundFill(color, new CornerRadii(3.0), null);
|
|
||||||
// setBackground(new Background(fill));
|
|
||||||
|
|
||||||
setTop(getHeader(account));
|
setTop(getHeader(account));
|
||||||
setBottom(getFooter(account));
|
setBottom(getFooter(account));
|
||||||
|
|
Loading…
Reference in New Issue