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); }