| Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
2.0 [2025/12/08 13:50] 65.108.125.120 old revision restored (2025/11/24 21:54) |
2.0 [2025/12/10 07:46] (current) 54.37.252.212 old revision restored (2025/11/24 23:25) |
| ==== App Structure Overview ==== | ==== App Structure Overview ==== |
| |
| Both the frontend and backend are programmed in [[https://www.typescriptlang.org/docs/handbook/intro.html |Typescript]] which is executed by the [[https://www.npmjs.com/package/ts-node |ts-node]] package; Typescript is a type safe, and more structured superset of the [[https://www.freecodecamp.org/news/the-complete-javascript-handbook-f26b2c71719c/ |Javascript]] lanugage (ES6/ES12-ES2021). We use [[https://classic.yarnpkg.com/lang/en/docs/ |Yarn]] on the frontend and backend also, to install packages (like ts-node) and run a local development server. | Both the frontend and backend are programmed in Typescript which is executed by the [[https://www.npmjs.com/package/ts-node |ts-node (documentation here))]] interpreter; Typescript is a type safe, and more structured varient of the javascript lanugage (ES6/ES12-ES2021). We use Yarn on the frontend and backend also, to install packages and run a local development server. |
| |
| |
| An [[https://www.apollographql.com/ |Apollo GraphQL]] server is used in the backend, to provide structured and secure interface to interact with the database. [[https://github.com/typeorm/typeorm/blob/master/docs/active-record-data-mapper.md#what-is-the-data-mapper-pattern |TypeORM]] is the database adapter which connects to the database allowing us to manipulate the tables and data within it; graphql uses the TypeORM adapter in order to access the data. We've not currently chosen a server to serve the backend code to the client, therefore, the project only works locally from development enviroments. | A GraphQL server is used in the backend, to provide structured and secure access to the data in our Database. We've not currently chosen a server to serve the backend code to the client, therefore, the project only works locally from development enviroments. |
| |
| Our database is implemented in [[https://www.postgresql.org/ |Postgres]], which is a relational database that uses SQL. [[https://www.pgadmin.org/download/ |PGAdmin4]] is a decent tool for exploring the database. | Our database is implemented in Postgres, which is a relational database that uses SQL. |
| |
| ==== Packages ==== | ====Frontend==== |
| |
| === ts-node === | ====Backend==== |
| |
| [[https://www.npmjs.com/package/ts-node |ts-node]] is a typescript execution engine that allows us to write this project as typescript instead of javascript. ts-node is essentially a `source-to-source compiler` / `transpiler`, as it turns one language into another, i.e. typescript into javascript. | === Libraries === |
| |
| === GraphQL (Apollo) === | == GraphQL (Apollo) == |
| |
| We use [[https://www.apollographql.com/ |Apollo GraphQL]] as our implementation of GraphQL. | We use [[https://www.apollographql.com/ |Apollo GraphQL]] as our implementation of GraphQL. |
| ([[https://odyssey.apollographql.com/ |Tutorial here]]) | ([[https://odyssey.apollographql.com/ |Tutorial here]]) |
| |
| === cross-env === | == cross-env == |
| |
| [[https://www.npmjs.com/package/cross-env |cross-env]] is used for setting the environment mode the project is run in, in a OS independant way. It is used in the package.json file. | [[https://www.npmjs.com/package/cross-env |cross-env]] is used for setting the environment mode the project is run in, in a OS independant way. It is used in the package.json file. |
| ===== Project setup and Build ===== | ===== Project setup and Build ===== |
| |
| ==== Run the project locally ==== | TBA |
| | |
| Using the [[https://docs.npmjs.com/cli/v8/using-npm/scripts |scripts]] in the package.json file in the backend directory, use Yarn to run the 'dev' script, e.g. | |
| <code>yarn run dev</code> | |
| which is the same as running: | |
| <code>yarn run cross-env NODE_ENV=development ts-node-dev --files -- ./src/index.ts</code> | |
| * 'Yarn' is our package manager, but also its acting as our server as this is a command for local development | |
| * 'run' tells yarn to execute something | |
| * 'cross-env' is a package used to set the programmign enviroment variables in a OS independant way | |
| * 'NODE_ENV=development' is a cross-env option to set the enviroment to development | |
| * 'ts-node-dev' is our typescript execution engine as we want our typescript files to be executed with a typescript engine | |
| * '- -files' is a ts-node option, to tell ts-node to load files specified in the `tsconfig.json` file. We do this as the `blipp` package doesn't import correctly unless this happens, as ts-node can't see the blipp file in `backend/type/blipp.d.ts` | |
| * '- -' is used to stop options being passed to ts-node (i.e. we passed ts-node '- -files', we don't want to pass anything else) | |
| * './src/index.ts' is the first file we are running as it's the root | |
| |
| === Potential build issues, and their fixes === | === Potential build issues, and their fixes === |