# Developer Documentation
[toc]
## Setup
### Setup Mannually
Note: The backend part can only be run on [**NixOS**](https://nixos.org/) operating system, which is a powerful Linux distribution based on the Nix package manager.
- **Setup postgresql service**: Add following to `/etc/nixos/configuration.nix`. Add then run `nixos-rebuild switch` to apply the configuration to system.
```nix
{
...
# postgresql service
services.postgresql = {
enable = true;
package = pkgs.postgresql_15;
enableTCPIP = true;
authentication = pkgs.lib.mkOverride 10 ''
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
'';
initialScript = pkgs.writeText "backend-initScript" ''
CREATE ROLE nixcloud WITH LOGIN PASSWORD 'nixcloud' CREATEDB;
CREATE DATABASE nixcloud;
GRANT ALL PRIVILEGES ON DATABASE nixcloud TO nixcloud;
'';
};
# List packages installed in system profile.
environment.systemPackages = with pkgs; [
postgresql_15
];
programs.nix-ld.enable = true;
environment.sessionVariables = {
NIX_LD = toString (pkgs.runCommand "ld.so" {} ''
ln -s "$(cat '${pkgs.stdenv.cc}/nix-support/dynamic-linker')" $out
'');
NIX_LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath (with pkgs; [
zlib
zstd
stdenv.cc.cc
curl
openssl
attr
libssh
bzip2
libxml2
acl
libsodium
util-linux
xz
systemd
]);
};
# Enable Flake
nix.settings.experimental-features = [ "nix-command" "flakes" ];
}
```
- **Clone project**: `git clone https://github.com/sustech-cs304/team-project-111.git`
- **Nix develop**: Enter into project root directory and run `nix develop .` Then a new bash shell with all the dependencies setup well should be started
### Dcoker
## Run
- **Frontend**
- `cd kerbal-dashboard`
- `npm install`
- `npm start`
You should also set up the proxy policy in `src/setupProxy.js` to handle backend request forward and solve CORS problem
<img src="https://raw.githubusercontent.com/zephyrszwc/zephyrs-image/master/202305312129926.png" alt="carbon" style="zoom:50%;" />
- **Backend**
- Run `nix develop .`
- Run `mix deps.get` in the opened bash shell
- Run `GPU_IDS="[]" iex --sname [sname] -S mix phx.server`. You should export all your gpu ids as enviroment variable.
## APIs
Run codes below to generate API doc
- `cd kerbal-backend`
- `mix docs`
Then docs can be found
<img src="https://github.com/VSEJGFB/Cnblogs-Theme-SimpleMemory/assets/29839623/dbf8e22b-d3d5-40cb-9640-866e5876d4fe" alt="image" style="zoom:80%;" />

<img src="https://github.com/VSEJGFB/Cnblogs-Theme-SimpleMemory/assets/29839623/490eb916-ca86-4848-8c6a-e733ecdfc00f" alt="image" style="zoom:80%;" />
Describe:
For every module in the project, the develop documentation contains:
- A summary of the module, typically sourced from the module's `@moduledoc` attribute.
- A list of all functions, macros, and types defined in the module. This list includes a brief summary of each item, typically sourced from the item's `@doc` or `@typedoc` attribute.
- Detailed documentation for each function, macro, and type. This documentation includes the item's full doc attribute, along with any relevant metadata (such as the function's parameters and return type).