Skip to content

Dev

There are two parts of this project: the android app and the restful server. There is also a third part, the client used by the app to communicate with the server, which will be briefly mentioned at the end.

Android app

Built with Dart using the Flutter framework. Divided in two subprojects: one encapsulates the logic of the app (mainly state management, models and services) and has no material/flutter imports; the other contains the UI side (pages, routing and such).

State management is handled with the help of the BLoC package. Roughly each screen is assigned one to two BLoCs (one to send the main state of the page and a second one -which is called manager- to handle and react to events from the user).

Internationalisation (i18n/l10n) is managed with the built-in Flutter tools (flutter_localizations package).

Server

Built with Rust using the Actix framework. It implements a RESTful API to access the database (currently only postgres supported). It also connects to an image provider to store the images (currently only cloudinary supported through the cloudinary_client crate).

Database access is handled through sqlx. There is no ORM, instead serde is used to de/serialize and SeaQuery (a query builder library independent from SeaORM) is used to abstract the SQL query creation.

OpenAPI specification is (semi)automatically generated using the utoipa crate and is accessible in /api-docs/ when the server is up. It can also be accessed through this docs here.

Client

Initially built from the OpenAPI specification using the OpenAPI Generator. From that initial automatic generation some tweaks were applied. It's also updated (manually) whenever the server changes with the help of the aforementioned generator.