Rex Dri issueshttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues2020-06-14T13:25:19Zhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/184Add stats regarding feedback completion2020-06-14T13:25:19ZFlorent ChehabAdd stats regarding feedback completionCompute basics statistics (dayly) regarding what is the percentage of exchange with feedbacks, how many new feedbacks, etc.Compute basics statistics (dayly) regarding what is the percentage of exchange with feedbacks, how many new feedbacks, etc.PR-P20Maxime EmschwillerMaxime Emschwillerhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/149Last visited universities2020-06-07T12:16:19ZFlorent ChehabLast visited universitieshttps://gitlab.utc.fr/rex-dri/rex-dri/issues/149
Backend:
1. Create an intermediate model (LastVisitedUniversity) between the user and university models
* This model contains 3 fields : one for user (foreign key) , one for universi...https://gitlab.utc.fr/rex-dri/rex-dri/issues/149
Backend:
1. Create an intermediate model (LastVisitedUniversity) between the user and university models
* This model contains 3 fields : one for user (foreign key) , one for university (foreign key) and one for lastClickOnUniversity (DateTimeField: auto_now = True)
2. Create a viewset to update the previous model when a user looks at a university (get inspired by https://gitlab.utc.fr/rex-dri/rex-dri/-/blob/dev/backend/backend_app/viewsets.py#L316).
Endpoint: /lastVisitedUniversities
req POST endpoint/<pk_univ> => Create LastVisitedUniversity(user=req.user, university=University.get(pk=<pk_univ>), ~~ts=now()~~)
req GET endpoint => return List[LastVisitedUniversity.where(user=req.user).orderby(ts DESC).first(5)] (list[int] === List[<pk_univ>])
SQL:
```sql
SELECT university, max(ts) as ts
FROM LastVisitedUniversity
WHERE
USER = <req.user.pk>
GROUP BY university
ORDER BY ts DESC
LIMIT 5;
```
other => Return 404
Frontend:
1. When visiting university: make POST request (https://gitlab.utc.fr/rex-dri/rex-dri/-/blob/dev/frontend/src/components/recommendation/view/View.jsx#L676 use the useApiCreate() hook)
2. Create component to show last visited univ (and mention REX-DRI private)
PR-P20Imane MisrarImane Misrarhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/177Filter: give more suggestions & merge IM, GSM, GM ?2020-05-24T18:53:21ZFlorent ChehabFilter: give more suggestions & merge IM, GSM, GM ?> Dans la recherche, si je commence à taper « IM » dans le filtre par branche, seules quelques filières apparaissent. Je ne trouve pas « IM-CMI ». Il faut taper CMI pour faire apparaître IM-CMI et GSM-CMI (nécessité de garder les deux ?)> Dans la recherche, si je commence à taper « IM » dans le filtre par branche, seules quelques filières apparaissent. Je ne trouve pas « IM-CMI ». Il faut taper CMI pour faire apparaître IM-CMI et GSM-CMI (nécessité de garder les deux ?)PR-P20Estelle VeisemburgerEstelle Veisemburgerhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/148Filter only on currently available destinations2020-05-17T15:54:44ZFlorent ChehabFilter only on currently available destinations## Objective
* Being able to filter only on open destinations, [on the map and search pages (it's the same component)](https://rex.dri.utc.fr/app/map/)
## Context
### Back
* Every night, the UTC DRI data are copied from the DSI to RE...## Objective
* Being able to filter only on open destinations, [on the map and search pages (it's the same component)](https://rex.dri.utc.fr/app/map/)
## Context
### Back
* Every night, the UTC DRI data are copied from the DSI to REX-DRI [source](https://gitlab.utc.fr/rex-dri/rex-dri/-/blob/dev/backend/cron_tasks.py#L38)
* You should be able to plug yourself in the [`__import_opened_destinations` method](https://gitlab.utc.fr/rex-dri/rex-dri/-/blob/dev/backend/external_data/management/commands/utils.py#L199) and the [`update` method](https://gitlab.utc.fr/rex-dri/rex-dri/-/blob/dev/backend/external_data/management/commands/utils.py#L76), to track which partners are "open" on the UTC ENT.
* You should also know (and maybe use -- it's up to you) that some denormalized data is updated every night on the [`University` model](https://gitlab.utc.fr/rex-dri/rex-dri/-/blob/dev/backend/backend_app/models/university.py#L72). This is the data that is used for filtering.
### Front
* The filter Component is [here][https://gitlab.utc.fr/rex-dri/rex-dri/-/blob/dev/frontend/src/components/filter/Filter.jsx)
* The filtering itself is handled within the [`FilteringService` class](https://gitlab.utc.fr/rex-dri/rex-dri/-/blob/dev/frontend/src/services/FilterService.js)
Have fun :tada:
Bonus point if you throw some [transaction](https://docs.djangoproject.com/fr/2.2/topics/db/transactions/#controlling-transactions-explicitly) somewhere :rolling_eyes: PR-P20Imane MisrarImane Misrarhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/176Add switch to only show exchanges with feedback on univ page2020-05-11T07:19:41ZFlorent ChehabAdd switch to only show exchanges with feedback on univ pageAs we can see on the screenshot bellow, most of exchanges are 'empty': nossing was contributed by the student concerned by the exchange.
The objective here is to add a switch next to `branch` to show only exchanges with contributions.
(...As we can see on the screenshot bellow, most of exchanges are 'empty': nossing was contributed by the student concerned by the exchange.
The objective here is to add a switch next to `branch` to show only exchanges with contributions.
(the switch should be active by default and if no exchanges match add a button to easily switch back it off)
:warning: think about the behavior we want when coming back to the page, etc.
![Screenshot_from_2020-04-04_13-29-40](/uploads/0fd9561aa15731381873df583ea9be05/Screenshot_from_2020-04-04_13-29-40.png)PR-P20Imane MisrarImane Misrarhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/146Filter: last known active semester of a univ2020-05-03T18:55:22ZFlorent ChehabFilter: last known active semester of a univActivate it by defaultActivate it by defaulthttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/175map: add legend2020-04-25T16:44:44ZFlorent Chehabmap: add legendAdd legend to explain what are the two colors.
* [ ] Create a legend component
* [ ] Overlay on top of the map
* [ ] Works for both in dark and light mode
![Screenshot_from_2020-04-04_12-56-46](/uploads/00f54ed50444817f8103ca5289e8a7f7...Add legend to explain what are the two colors.
* [ ] Create a legend component
* [ ] Overlay on top of the map
* [ ] Works for both in dark and light mode
![Screenshot_from_2020-04-04_12-56-46](/uploads/00f54ed50444817f8103ca5289e8a7f7/Screenshot_from_2020-04-04_12-56-46.png)
PR-P20Estelle VeisemburgerEstelle Veisemburgerhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/123Support pagination in DRF and frontend2019-06-30T16:23:30ZFlorent ChehabSupport pagination in DRF and frontendEspecially this endpoint has to be paginated: http://localhost:8000/api/exchangeFeedbacks/Especially this endpoint has to be paginated: http://localhost:8000/api/exchangeFeedbacks/https://gitlab.utc.fr/rex-dri/rex-dri/-/issues/28Handling of automatic data update2019-06-30T16:23:30ZFlorent ChehabHandling of automatic data update# :warning: **Never ever commit any ID or data from the UTC DB** :warning:
## UTC Data
UTC data is hosted on an Oracle database.
### Step 1
* [x] ~~Create a new django app in the folder `interface_UTC` (at the root of the repo).~~ ...# :warning: **Never ever commit any ID or data from the UTC DB** :warning:
## UTC Data
UTC data is hosted on an Oracle database.
### Step 1
* [x] ~~Create a new django app in the folder `interface_UTC` (at the root of the repo).~~ (will be done in Java)
* [x] The app should connect to the UTC DB and convert the 4 views to JSON arrays,
* [x] This app must advertise one endpoint for each view,
* [x] The app must advertise other endpoints that accept a login as parameter:
* [x] to check what are the sharing permissions associated with a student
* [x] to get all the departures information for a student
* So that we don't have to fetch all the data when there is a permission change.
* [x] The app must be documented, consistent (error code) and resilient,
* [x] All endpoints will be readonly.
### Step 2
* [x] Create a mock of this new API so that we can easily use it in a dev environment.
* [x] Don't commit any personal data,
* [x] You can use a local database (of your choice) to hold the dev data,
* [x] All the mock data should be of the form of (commited) SQL scripts,
* [x] You should update the `docker-compose` file with the new service(s).
### Step 3
* [x] Create the python scripts to handle the transfer of the data from the API created above into Django models.
* [x] Those scripts should be runnable on demand.
* [x] Put them in a sub-application of the `backend` called `data_exchange`
## Currency exchange rate
* [x] Handle the connection to Fixer API to retrieve the exchange rates (directly from `data_exchange`)
* [x] Handle the update of the data in the model
* [x] Make it resilient.
## Both
* [x] Investigate the use of Cron (inside the backend docker container) to have an automated daily data update.
https://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.html
## Finally
- [x] Create a backend model / and frontend page, to show when where the latest update / the number of errors; so that anyone can see if the system is healthy at any point in time.
- [x] Also run clearsessions and delete user in the cron
:tada: PR nextAlexandre LanceartAlexandre Lancearthttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/32Ask the student to give the information of the course language when evaluating2019-06-27T20:03:58ZFlorent ChehabAsk the student to give the information of the course language when evaluatingAllow up to two languages per course (one might be null).
Following #29
This information might be used to search universities by teaching language at some point.
Linked to #116
Allow up to two languages per course (one might be null).
Following #29
This information might be used to search universities by teaching language at some point.
Linked to #116
PR nextSegolene BrisemeurSegolene Brisemeurhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/58Finish adding all TagsModels and add to front2019-06-27T20:03:58ZFlorent ChehabFinish adding all TagsModels and add to frontOnce #57 is done.
Add all the remaining (relevant) models, tags and validation to the backend.
Create the corresponding component for the frontend (requires #51 to be done) and add everything to the front.Once #57 is done.
Add all the remaining (relevant) models, tags and validation to the backend.
Create the corresponding component for the frontend (requires #51 to be done) and add everything to the front.Florent ChehabFlorent Chehabhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/30Tag icon consistent with tag type2019-06-27T20:03:58ZFlorent ChehabTag icon consistent with tag typeFlorent ChehabFlorent Chehabhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/29Handle feedback on courses.2019-06-27T20:03:58ZFlorent ChehabHandle feedback on courses.# Backend
:warning: Review/update the backend structure for this matter. :warning:
Currently we have the following architecture:
![Screenshot_from_2019-02-24_21-27-57](/uploads/e65271dc964ae850796765acad4cfa15/Screenshot_from_2019-02-...# Backend
:warning: Review/update the backend structure for this matter. :warning:
Currently we have the following architecture:
![Screenshot_from_2019-02-24_21-27-57](/uploads/e65271dc964ae850796765acad4cfa15/Screenshot_from_2019-02-24_21-27-57.png)
Several notes:
- One possible design to do (or not to do) is to create a model that contains the feedback for one course and that is link to an exchange.
- If you do so don't forget to modify your queryset to prefetch all the feedback (ask @chehabfl) for better performances.
- If you do so, you can put the general feedback of the user on the exchange model (aka PreviousDeparture)
- The other possibility, is to stick to JSON, but I think the one above is better to start with.
You have to keep in mind that:
- The courses followed by a student will automatically created (and updated) given the data from the UTC database.
Some questions have to be resolved for this issue:
- What do you grade on each course (for now: adequation and quality; I don't recall why I chose "integration")
- #59
Of course, don't forget about security:
- the info should be readable by everyone, but editable only by the user (and eventually a moderator (and above level)).
- For now, you can use a versioned model (that will automatically compress the successive version by the user, but will allow to keep track if an admin modify something).
# Frontend
Well, then you need to build the front for this.
First display information, then add the possibility to edit.
You might want to wait for #51 to be fixed first, but that's not necessary. PR nowSegolene BrisemeurSegolene Brisemeurhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/125Add search in multiselect2019-06-22T12:03:38ZFlorent ChehabAdd search in multiselect=> limit rendering time for ultra large list=> limit rendering time for ultra large listhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/34Recommendation list2019-06-22T12:03:38ZFlorent ChehabRecommendation listEnable the user to create list of universities.
:warning: The backend architecture might need an update. I would highly recommend starting by building the frontend for this. :warning:
- A user can create multiple lists of universities...Enable the user to create list of universities.
:warning: The backend architecture might need an update. I would highly recommend starting by building the frontend for this. :warning:
- A user can create multiple lists of universities,
- Each list can contain each university at most once,
- For each university, the user can add a markdown comment and "grades" (to determine),
- Users can reorder the list,
- Users can add "block" of markdown comment.
- The list can either be private or public (shareable -> useful for teachers). Therefore, some backend checks will be needed to verify that a user as read access to the list.
You can think of a list as something close to a Jupyter Notebook with "university blocks" and "comment blocks".PR nowSolene AboudSolene Aboudhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/110Add logging support2019-05-25T12:07:18ZFlorent ChehabAdd logging supportWhile in production environment it will be essential to be able to keep logs of certain actions :)While in production environment it will be essential to be able to keep logs of certain actions :)Florent ChehabFlorent Chehabhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/112Switch to standard JSON schema validation in the backend2019-04-21T17:52:19ZFlorent ChehabSwitch to standard JSON schema validation in the backendhttps://json-schema.org/understanding-json-schema/index.htmlhttps://json-schema.org/understanding-json-schema/index.htmlhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/65Add the possibilty for the user to use pseudonyme2019-04-07T12:33:43ZFlorent ChehabAdd the possibilty for the user to use pseudonymeThis issue will be detailed in the future.
NB: make sure that the API returns only the pseudonyme if the use wished to only disclose this to other people.
Linked to #64 This issue will be detailed in the future.
NB: make sure that the API returns only the pseudonyme if the use wished to only disclose this to other people.
Linked to #64 Florent ChehabFlorent Chehabhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/64Create a « User page »2019-04-07T12:33:43ZFlorent ChehabCreate a « User page »This issue will be detailed in the future.This issue will be detailed in the future.Florent ChehabFlorent Chehabhttps://gitlab.utc.fr/rex-dri/rex-dri/-/issues/35Add markdown tag for foreign currency2019-02-27T11:40:31ZFlorent ChehabAdd markdown tag for foreign currencyAllow a special tag in all markdown fields to handle foreign currency automatic conversion.
E.g. `:amountCurrency:` (`:100CHF:`) would show up as: `100CHF (~95 €)` in the rendered markdown with link to xe converter.Allow a special tag in all markdown fields to handle foreign currency automatic conversion.
E.g. `:amountCurrency:` (`:100CHF:`) would show up as: `100CHF (~95 €)` in the rendered markdown with link to xe converter.Florent ChehabFlorent Chehab