finnow/finnow-api/source/profile/data.d

43 lines
1.3 KiB
D

module profile.data;
import handy_httpd.components.optional;
import profile.model;
/// Repository for interacting with the set of profiles belonging to a user.
interface ProfileRepository {
Optional!Profile findByName(string name);
Profile createProfile(string name);
Profile[] findAll();
void deleteByName(string name);
ProfileDataSource getDataSource(in Profile profile);
}
/// Repository for accessing the properties of a profile.
interface PropertiesRepository {
Optional!string findProperty(string propertyName);
void setProperty(string name, string value);
void deleteProperty(string name);
ProfileProperty[] findAll();
}
/**
* A data source for all data contained within a profile. This serves as the
* gateway for all data access operations for a profile.
*/
interface ProfileDataSource {
import account.data;
import transaction.data;
PropertiesRepository getPropertiesRepository();
AccountRepository getAccountRepository();
AccountJournalEntryRepository getAccountJournalEntryRepository();
TransactionVendorRepository getTransactionVendorRepository();
TransactionCategoryRepository getTransactionCategoryRepository();
TransactionTagRepository getTransactionTagRepository();
TransactionRepository getTransactionRepository();
void doTransaction(void delegate () dg);
}