diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index abe08db..0000000 --- a/.drone.yml +++ /dev/null @@ -1,26 +0,0 @@ -kind: pipeline -type: docker -name: default - -trigger: - event: - - push - -steps: - - name: sonar-analysis - image: hub.codefirst.iut.uca.fr/camille.petitalot/drone-sonarplugin-reactnative:latest - commands: - - yarn install - - yarn test:coverage - - ls ./coverage - - sonar-scanner - -Dsonar.projectKey=AD_multiplat - -Dsonar.sources=. - -Dsonar.host.url=$${PLUGIN_SONAR_HOST} - -Dsonar.login=$${PLUGIN_SONAR_TOKEN} - -Dsonar.javascript.lcov.reportPaths=./coverage/lcov.info - -Dsonar.exclusions=**/*.test.tsx,**/*.test.ts,**/*.spec.tsx,**/*.spec.ts,**/lcov-report/**,**/constants.ts,config.ts,babel.config.ts - settings: - sonar_host: https://codefirst.iut.uca.fr/sonar/ - sonar_token: - from_secret: SONAR_TOKEN diff --git a/README.md b/README.md index 8c59b63..43d6acd 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,137 @@ -[![Build Status](https://codefirst.iut.uca.fr/api/badges/alexis.drai/dice_app/status.svg)](https://codefirst.iut.uca.fr/alexis.drai/AD_multiplat) -[![Quality Gate Status](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=alert_status&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) - -[![Maintainability Rating](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=sqale_rating&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) -[![Reliability Rating](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=reliability_rating&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) -[![Security Rating](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=security_rating&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) - -[![Coverage](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=coverage&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) -[![Lines of Code](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=ncloc&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) - -[![Bugs](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=bugs&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) -[![Code Smells](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=code_smells&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) -[![Duplicated Lines (%)](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=duplicated_lines_density&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) -[![Security Hotspots](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=security_hotspots&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) -[![Technical Debt](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=sqale_index&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) -[![Vulnerabilities](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=AD_multiplat&metric=vulnerabilities&token=b3b8ca5709f99d5bcee2a2c495adb2fc804d3351)](https://codefirst.iut.uca.fr/sonar/dashboard?id=AD_multiplat) - -# AD_ReactNative +# PoKeMoNg A React Native app for educational purposes. Refer to [instructions here](https://react-native-courses.clubinfo-clermont.fr/docs/notation). -+ [Notation checklist](#notation-checklist) -+ [Sketches](#sketches) - - [Pokemongs](#pokemongs) - - [Moves](#moves) -+ [Using the app](#using-the-app) +- [About](#about) +- [Notation checklist](#notation-checklist) +- [Sketches](#sketches) + - [Home](#home) + - [Collection](#collection) + - [Detail](#detail) + - [Creating](#creating) + - [Updating](#updating) +- [Using the app](#using-the-app) + - [Running the backend](#running-the-backend) + - [Running this app](#running-this-app) +- [Known limitations](#known-limitations) + - [Sparse](#sparse) + - [Hardcoded enums](#hardcoded-enums) + +## About + +PoKeMoNg is a React Native application developed for educational purposes. The application is designed to showcase +a "master/detail" view of `Moves`, with basic CRUD features. The application is linked to +a [backend API](https://github.com/draialexis/pokemong_api) that provides the data for the Moves. ## Notation checklist -* [ ] Documentation (6 pts) - - [ ] Application sketches (4 pts) - - [ ] A Readme describing your project/application. (2 pts) +* [x] Documentation (6 pts) + - [x] Application sketches (4 pts) + - [x] A Readme describing your project/application. (2 pts) * [x] Basics (20 pts) - - [x] Navigation (3 pts) - + [x] Tab bottom navigation (2 pts) AND at least one button (1 pts) - - [x] Redux Store (10 pts) - + [x] Read data from redux store (2 pts) - + [x] Update data to redux store with actions and reducers (slice = 0) (4 pts) - + [x] Update data to redux store using redux-thunk (API AND|OR AsyncStorage) (4 pts) - - [x] Display list of items (2 pts) - + [x] FlatList, VirtualizedList or SectionList - - [ ] ~~Display dynamic image (2 pts)~~ - - [x] Binding child component props (1 pts) - - [x] Handle a TextInput correctly (2 pts) - + [x] Beware of keyboard management + - [x] Navigation (3 pts) + + [x] Tab bottom navigation (2 pts) AND at least one button (1 pts) + - [x] Redux Store (10 pts) + + [x] Read data from redux store (2 pts) + + [x] Update data to redux store with actions and reducers (slice = 0) (4 pts) + + [x] Update data to redux store using redux-thunk (API AND|OR AsyncStorage) (4 pts) + - [x] Display list of items (2 pts) + + [x] FlatList, VirtualizedList or SectionList + - [ ] ~~Display dynamic image (2 pts)~~ + - [x] Binding child component props (1 pts) + - [x] Handle a TextInput correctly (2 pts) + + [x] Beware of keyboard management * [ ] Application features (14 pts) - - [x] Retrieve data using the Web API (6 pts) - + [x] Handle fetch success callback (3 pts) - + [x] Handle fetch error callback (3 pts) - - [ ] Store favorite data into phone storage (2 pts) - - [ ] Write Tests (6 pts) - + [ ] all actions payload (1 pts) - + [ ] all reducers case (2 pts) - + [x] one UI Component (3 pts) + - [x] Retrieve data using the Web API (6 pts) + + [x] Handle fetch success callback (3 pts) + + [x] Handle fetch error callback (3 pts) + - [ ] Store favorite data into phone storage (2 pts) + - [ ] Write Tests (6 pts) + + [ ] all actions payload (1 pts) + + [ ] all reducers case (2 pts) + + [x] one UI Component (3 pts) ## Sketches -This app will contain several "master/detail" tabs. They are as follows. +This app will contain a home page, and a "master/detail" tab for `Moves` with basic CRUD features. + +### Home + +The home screen provides a logo, and tab navigation options to other parts of the application. + + + +### Collection + +The collection screen displays a list of `Moves` fetched from the API. + + + +### Detail + +The detail screen displays detailed information about a selected `Move`. + + + +### Creating + +The creating screen provides a form for creating a new `Move`. + + -### Moves +### Updating - +The updating screen provides a form for updating an existing `Move`. + + ## Using the app -This app is linked to a backend that is set up to accept CORS from [`http://localhost:19006`](http://localhost:19006). -If you want to use the dedicated API, please make sure you're not overriding that default port number when running this -app. +### Running the backend + +In order to use this app, you will need to run the dedicated backend. A `README` +with [instructions](https://github.com/draialexis/pokemong_api#user-content-prep-steps) is provided +for that purpose. + +### Running this app + +With the [Expo CLI](https://docs.expo.dev/more/expo-cli/) installed, at the root of the project, simply run + +```bash +npx expo start +``` + +or + +```bash +yarn start +``` + +The app should launch successfully, and instructions should be provided in terminal to open it on a number of devices. + +## Known limitations + +Beside whatever items may not have been checked off the [notation checklist](#notation-checklist), there are also +a number of known limitations and issues with this app. + +### Sparse + +See #4, #5, #9 + +Even though the API provides [a variety of entities](https://github.com/draialexis/pokemong_api#about) +with fun business logic, this app only implemented a "master/detail" and the basic CRUD features on one entity: `Move`. + +In short, for lack of time, this app doesn't quite manage to do anything beyond the basic requirements. It doesn't +use the API to its full potential, and the API doesn't really get a legitimate reason to provide even more interesting +routes (for instance, aggregation pipelines and filtered searches). + +### Hardcoded enums + +See #12 + +Enums of values such as `TypeName` and `MoveCategoryName` are defined by the API. The API provides an OAS, so we could +get those enums dynamically instead of copying and pasting them in this front-end project. + +Of course, that may increase complexity beyond the scope of this project, and it may impact performance negatively -- +but it seems like something we would take care of before deploying this app to production, in real-world conditions. diff --git a/docs/create.png b/docs/create.png new file mode 100644 index 0000000..b7118c3 Binary files /dev/null and b/docs/create.png differ diff --git a/docs/home.png b/docs/home.png new file mode 100644 index 0000000..2979852 Binary files /dev/null and b/docs/home.png differ diff --git a/docs/move.png b/docs/move.png new file mode 100644 index 0000000..e4d33bf Binary files /dev/null and b/docs/move.png differ diff --git a/docs/moves.jpg b/docs/moves.jpg deleted file mode 100644 index 1f2284d..0000000 Binary files a/docs/moves.jpg and /dev/null differ diff --git a/docs/moves.png b/docs/moves.png new file mode 100644 index 0000000..f914a69 Binary files /dev/null and b/docs/moves.png differ diff --git a/docs/update.png b/docs/update.png new file mode 100644 index 0000000..b8df689 Binary files /dev/null and b/docs/update.png differ