14 / 20Module 1: A Rell backend with FT4 accounts
Add modules to your dapp
Start applying this by splitting your code into smaller modules. Create a folder at Tic_tac_toe_Rell/src/tic_tac_toe and add a module.rell file to it:
module;Then add a file at src/tic_tac_toe/entities.rell and move your entity definitions there.
entity game { created_by: account; created_at: timestamp = get_last_block_time(); mutable player2_account_rowid: rowid = rowid(0); mutable last_step_by: rowid; mutable last_step_at: timestamp = get_last_block_time(); mutable winner: rowid = rowid(0); mutable status: game_status = game_status.created; mutable slot_1: slot_states = slot_states.free; mutable slot_2: slot_states = slot_states.free; mutable slot_3: slot_states = slot_states.free; mutable slot_4: slot_states = slot_states.free; mutable slot_5: slot_states = slot_states.free; mutable slot_6: slot_states = slot_states.free; mutable slot_7: slot_states = slot_states.free; mutable slot_8: slot_states = slot_states.free; mutable slot_9: slot_states = slot_states.free;}Move the import of the account entity from the ft4-library into module.rell as well. Placing it there gives every file in the module access to it.
module;import lib.ft4.accounts.{ account: account };import ft4_auth: lib.ft4.auth;Next, add a file in the src/test/tic_tac_toe folder and declare it as a module, which creates a new module called module:
@test module;import tic_tac_toe.{ game, game_status, slot_states };import tic_tac_toe.external.{ create_game, get_games_by_status, join_game, make_move, get_game_by_id };import lib.ft4.accounts.{ account: account, auth_descriptor };import lib.ft4.core.accounts.strategies.open.{ ras_open };import lib.ft4.test.core. { create_auth_descriptor, ft_auth_operation_for };import lib.ft4.external.accounts.strategies.{ register_account };To switch your dapp's entry point between the main module and the development module, change the module: tag in the blockchains definition of your chromia.yml file:
blockchains: tic_tac_toe: module: main moduleArgs: lib.ft4.core.admin: admin_pubkey: x"023BEE5A479CE5AF31F6F64EDE7BEAD394E92E4D973E1727782DB577A55E878563" # It can be completely random for learning purposes.compile: rellVersion: 0.14.9database: schema: schema_tic_tac_toetest: modules: - test.tic_tac_toe moduleArgs: lib.ft4.core.admin: admin_pubkey: x"023BEE5A479CE5AF31F6F64EDE7BEAD394E92E4D973E1727782DB577A55E878563" # It can be completely random for learning purposes.libs: ft4: registry: https://gitlab.com/chromaway/ft4-lib.git path: rell/src/lib/ft4 tagOrBranch: v1.2.0r rid: x"E96915FD7C9A5DD4E183D86F4A5B4BB5083A7CC1EDEB1465EDFFC926E67C93F6" insecure: false iccf: registry: https://gitlab.com/chromaway/core/directory-chain path: src/lib/iccf tagOrBranch: 1.87.0 rid: x"9C359787B75927733034EA1CEE74EEC8829D2907E4FC94790B5E9ABE4396575D" insecure: falseYour project is now organized with Rell modules. The file structure should look similar to this:
├── main.rell├── tic_tac_toe│ ├── auth.rell│ ├── entities.rell│ ├── enums.rell│ ├── functions.rell│ ├── mappers.rell│ ├── module.rell│ ├── utils.rell│ ├── require.rell│ └── external│ ├── module.rell│ ├── operations.rell│ ├── queries.rell└── test/tic_tac_toe ├── create_account_test.rell ├── create_full_game.rell ├── create_game_test.rell ├── helpers.rell ├── join_game_test.rell ├── make_move_test.rell └── module.rell