giseldo/neodataset huggingface dataset:
Re-sort routes to allow guest to access the marketplace

### Problem to Solve
As a Guest, I want to be able to navigate through the market place. 


### Technical Solution
* [x] Move the market place to `/` (currently login is in `/`
* [ ] Adapt `/` route to allow non authenticated users.
* [ ] Adapt navbar behaviour to non authenticated users, this includes sign in buttons.
* [x] Estudy re-write every route, due most of them start with `/my-projects`

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
* guest -> non authenticated user.


Additional Notes
=====================

### Gitlab routes:
```elixir
https://gitlab.com/dashboard
https://gitlab.com/dashboard/projects
https://gitlab.com/dashboard/projects/starred
https://gitlab.com/explore
https://gitlab.com/dashboard/groups
https://gitlab.com/:username
https://gitlab.com/profile
https://gitlab.com/help
https://gitlab.com/:namespace/:project_slug/-/tree/:branch
https://gitlab.com/:namespace/:project_slug/-/blob/:branch/path/to/file/:file_name
https://gitlab.com/:namespace/:project_slug/-/blame/:branch/path/to/file/:file_name
https://gitlab.com/:namespace/:project_slug/-/commits/:branch/path/to/file/:file_name
https://gitlab.com/:namespace/:project_slug/-/edit/:branch/path/to/file/:file_name
https://gitlab.com/:namespace/:project_slug/-/project_members
https://gitlab.com/:namespace/:project_slug/pipelines
https://gitlab.com/:namespace/:project_slug/pipelines/:pipeline_id
https://gitlab.com/:namespace/:project_slug/-/jobs
https://gitlab.com/:namespace/:project_slug/-/jobs/:job_id
https://gitlab.com/:namespace/:project_slug/-/merge_requests
https://gitlab.com/:namespace/:project_slug/-/merge_requests/:merge_id
https://gitlab.com/:namespace/:project_slug/-/merge_requests/:merge_id/diffs
https://gitlab.com/:namespace/:project_slug/-/merge_requests/:merge_id/commits
https://gitlab.com/:namespace/:project_slug/-/merge_requests/:merge_id/diffs?commit_id=:commit_id
https://gitlab.com/:namespace/:project_slug/-/merge_requests/:merge_id/pipelines
https://gitlab.com/:namespace/:project_slug/edit
https://gitlab.com/:namespace/:project_slug/-/project_members
https://gitlab.com/:namespace/:project_slug/-/settings/integrations
https://gitlab.com/:namespace/:project_slug/-/settings/repository
```

Story points: 6.0
Backend: POC for sending mails

### Problem to Solve

EMails have to be sent to the users, for example when registering, forgot password, many notifications, but also newsletters.

Following constraints should be met:
* sending mails with html 
* support templates, likes names and emails
* also support fully dynamically html generated emails ("those are top 5 data operations this week"), so therefore we have to be flexibile!
* should not be too expensive
* may be used for newsletters in future (in the beginning we could use external services such as Mailchimp)
* if we have newsletters, we have to support unsubscribe
* MLReef based info-letters (e.g. merge request, model published, etc) required
* Info-letters need to be manageble in MLReef and through "unsuscribe" in the eMail

### Technical Solution

* [ ]  Research Apis and also sendmail
* [ ]  implement for proof of concept: activation with email, firstname, lastname
* [ ]  activation token in email
* [ ]  custom react route to show welcome page and push to backend-endpoint
* [ ] backend-endpoint activates and maybe login the user

Story points: 13.0
Cleanup after switch to Gitlab CAS

### Problem to Solve
After having switched to Gitlab our main CAS we need also to change the registration process in the backend and get rid of unused entities in the backend's database.

Additionally, to be compliant with the frontend's design the registering endpoint needs to be expanded to contain the following fields

![image](/uploads/fbd0c6bd3f4c63d9992bb8d009fe220d/image.png)

### Technical Solution
* [ ]  remove now obsolete database entities
* [ ]  streamline the registration process
* [ ]  add missing fields and store the values in Gitlab
* [ ]  adapt the frontend to correctly call our API with all fields

Additional Notes
===================

relates to: 
* https://gitlab.com/mlreef/backend/-/merge_requests/51
* #352

Story points: 2.0
Simplify Gitlab configuration

The following discussion from !400 should be addressed:

- [x] @flohin started a [discussion](https://gitlab.com/mlreef/frontend/-/merge_requests/400#note_323222306): 

    > I really think we should omit the HOST and PORT split, as it has no advantages over URL
    > 
    > for example, our GITLAB_ROOT_URL could be "https://ec2-waws.something.eu/proxy/gitlab", there are no ":" included, but maybe that is necessary for the future ;)



`frontend/src/bin/deploy.sh`
```
echo "# Automatically added by the deploment pipeline .gitlab-ci-deploy.yml" >$DOCKER_ENV
{
  echo "# The REACT_APP_API_GATEWAY is used by the frontend to direkt API calls"
  echo "# The GITLAB_HOST is for gitlab to serve links correctly (see docker-compose.yml)"
  echo "REACT_APP_API_GATEWAY=http://$INSTANCE"
  echo "# The gitlab server always serves port 80 locally. By setting the GITLAB_PORT variable,"
  echo "# we let gitlab know, that the container's port 80 is mapped differently from the outside."
  echo "GITLAB_PORT=$GITLAB_PORT"
  echo "# The GITLAB_ROOT_URL is used by the backend to connect to gitlab"
  echo "# The hostname 'gitlab' is created by the local docker network"
  echo "GITLAB_ROOT_URL=http://gitlab:$GITLAB_PORT"
  echo ""
  echo "# The GITLAB_ADMIN_TOKEN is shared between Gitlab and the Backend"
  echo "GITLAB_ADMIN_TOKEN=$GITLAB_ADMIN_TOKEN"
  echo ""
  echo "# These secrets are used by Gitlab to encrypt passwords and tokens"
  echo "# Changing them will invalidate the GITLAB_ADMIN_TOKEN as well as all other tokens"
  echo GITLAB_SECRETS_SECRET_KEY_BASE=$GITLAB_SECRETS_SECRET_KEY_BASE
  echo GITLAB_SECRETS_OTP_KEY_BASE=$GITLAB_SECRETS_OTP_KEY_BASE
  echo GITLAB_SECRETS_DB_KEY_BASE=$GITLAB_SECRETS_DB_KEY_BASE
}
```

Story points: 2.0
Edit MR view

### Problem to Solve
The edit merge request view is very similar to the "Create New Merge Request" but has some slight differences. 

* [ ]  Title of the view is different
* [ ]  Title and description are prefilled
* [ ]  Save changes button changed
* [ ] Add some markdown support

### Technical Solution
> Add technical implementation details and the results of the tickets discussion here.

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================
Link to XD: https://xd.adobe.com/view/d7fb2e27-4841-4fe0-4951-6a6a4c32460e-a1ca/

![Edit_MergeRequest](/uploads/9f72d236c8eefe43f5fa950ff9b8a122/Edit_MergeRequest.png)

Story points: 8.0
CAS to be implemented to all controllers

### Problem to Solve
New Security from issue 397-CAS-proof-of-concept is implemented in Groups, CodeProjects and DataProjects controllers. We need to cover all other controllers in the project

### Technical Solution
1. Add @PreAuthorize(...) annotation to all methods of controllers that should be closed from unauthorized access
2. Add @PostAuthorize(...) possibility for post process of returning object (it is applicable when we request objects by name or any other non-id attributes)
Example: @PostAuthorize("hasAccessToProject(returnObject, 'MAINTAINER')")

* [ ]  Add @PreAuthorize annotations to methods of controllers
* [ ]  Add @PostAuthorize annotations to methods of controllers which search objects by name
* [ ]  Add one test for success access and one test for unauthorized/insufficient rights request for each request
* [ ]  If useful: Add documentation to the readme

### Further information

* https://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#test-mockmvc

Story points: 1.0
Follow-up from "Widen cards space and improve responsiveness"

The following discussion from !402 should be addressed:

- [ ] @diegovinie started a [discussion](https://gitlab.com/mlreef/frontend/-/merge_requests/402#note_321852518):  (+1 comment)

> "We should discuss the breakpoints because is important to be the same throughout the project"

Set globally some breakpoints that fit our necessities.

Story points: 4.0
Review Annotations/ Decorators + Parser for data operators

### Problem to Solve

The current annotations /decorators + parser should be reevaluated for further simplicity. 


### Technical Solution
> Add technical implementation details and the results of the tickets discussion here.

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================
Vie example of annotations / decorators on random crop functions in VergeML: https://github.com/mme/vergeml/blob/master/vergeml/operations/crop.py

View parser on VergeML: https://github.com/mme/vergeml/blob/master/vergeml/operation.py

Story points: 6.0
Get rid of User's permanent Gitlab API token

### Problem to Solve
Currently, the backend creates and saves a (permanent) Gitlab API token.

In the future, we want to get rid of those permanent tokens and use either the backend's Gitlab Admin Token for almost all requests.

If necessary the User's OAUTH-token can also be used 


### Technical Solution
* [ ]  Remove the permanent API tokens from the Data Model
* [ ]  Add tests
* [ ]  Add doc


### Terminology
* **Admin Token:** The Gitlab API Admin token that is created during the installation of MLReef. Lifetime: indefinite
* **permanent token:** The Gitlab API token created by the backend during the User's registration. Lifetime: indefinite
* **OAUTH-token:** The temporary token Gitlab creates for us during a User's login. Lifetime: 2 hours


Additional Notes
===================
During Login the MLReef backend currently responds with the _permanent token_ **AND** _OAUTH token_.

Technically, the OUATH token is issued by Gitlab after the Backend requests it.


**Example response**
```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 250

{
  "id" : "cb61374e-9a0c-4b7b-a73d-19018d592722",
  "username" : "vdyhttcwyy",
  "email" : "vdyhttcwyy@example.com",
  "gitlab_id" : 1,
  "token" : "doesn**********",
  "access_token" : "accesstoken12345",
  "refresh_token" : "refreshtoken1234567"
}
```

Story points: 2.0
Group_overview_projects

### Problem to Solve
As a user, when i click on a group, i will be directed to the group_overview_projects view. 

In general, this group_overview view with all its subviews is where the user can manage its group. 


### Technical Solution
> Add technical implementation details and the results of the tickets discussion here.

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================

Link to XD: https://xd.adobe.com/view/4cec0111-f89b-4825-6363-58d95e361fef-3add/

![image](/uploads/9fab3bd00b19849072fcff1bb212137a/image.png)

![image](/uploads/3cf45541d09d36c3e40945249d21265f/image.png)

Story points: 16.0
Generic Projects Endpoint

### Problem to Solve
In order to be able to provide human-readable URLs in the Frontend (e.g. `mlreef.com/namespace/projectslug/`), the frontend must be able to get information about projects just by their `namespace` and `slug`.




### Technical Solution
Add a link to the actual project entity like (`/api/v1/data-projects/0000-00000000-000000`) so that the client can easily get additional data if needed.

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
[MLReef's Glossar](https://gitlab.com/mlreef/www-mlreef-com/-/tree/master/handbook)

* **namespace:** The name slug of the Subject who is the owner of a project; Either the project owner's username slug or the group name slug)
* **project-slug**: Slug of the project's name
* **slug:** a simplified version of a String containing only lowercase characters and with everything except 0-9 and a-z replaced with -. Use in URLs and domain names.



Story points: 4.0
Test preloading of pages

### Problem to Solve
We want to have a preloading mechanism when entering new views. Instead of just jumping in and showing posslibly empty views (as the info still needs to get fetched by the API), we use a preloading similar to how GitLab does it. 

You click, the top left icon from gitlab animates, the nav-icon on the browser tab shows a loading, and after a while it jumps to a "nearly" fully loaded page. 

### Technical Solution
We need to find and agree one classic loading spinner (in the design its a placeholder!).



### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================
Link to XD for Data Repo Overview: https://xd.adobe.com/view/c6c402fa-d7f8-4b46-4c6f-dd6257402fb4-b0f5/

![Data_Rep_Overview_A_loading](/uploads/944eb2c9b90208b750a9ac3183846659/Data_Rep_Overview_A_loading.png)


Story points: 4.0
Wrong bread crumb when in experiment overview

### Observed behaviour
The breadcrum in the experiment overview is mlreef > test project > Data  >  Experiments 

and the "data" part is clickable. 

### Expected behaviour

It should say: mlreef > test project > Experiments 

and the "test project" should be clickable!

### Steps to reproduce



### Terminology
> Define terms that are important in the context of this task



### Solution
> Add technical implementation details and the results of the tickets discussion here.

* [ ]  Add at least one test



Additional Notes
=====================
![image](/uploads/cb0bbc69bb5043948bb587b932fc84e7/image.png)

Story points: 1.0
Create MR button in data repo overview stays always "inactive"

### Observed behaviour

Even though commits happened compared to a master branch, the create merge request button from the data repo overview is inactive and not clickable (nothing happens)


### Expected behaviour
When there tare commits / changes one should be able to create a merge request. 


### Steps to reproduce
Develop, some project, created new branch from master, commited some changes, switched to new branch on repository overview. 


### Terminology
> Define terms that are important in the context of this task



### Solution
> Add technical implementation details and the results of the tickets discussion here.

* [ ]  Add at least one test



Additional Notes
=====================

![image](/uploads/62c3e5ca7017c7a872e81119569a6512/image.png)

Story points: 3.0
CORS error when attempting to create a group

### Observed behavior

An error has been thrown when calling the GitLab endpoint `/groups`. 
If the same machine URL is used for the rest of the API calls everything works fine, so this error is probably caused by a problem with the Nginx gateway configuration. 

![image](/uploads/f6f730c7a6cee64a715c101c2cd8ae9c/image.png)

### Expected behavior

API URL does not throw a CORS error.

### Steps to reproduce

Click on the "Create group" button

### Terminology
CORS

Story points: 1.0
Add global project class marker to repository view

### Problem to Solve
As a user I want to have the colored marker when navigating to the different project classes repositories (ML Project, Model, Data Operation, Data Visualization). 

The project marker is found

a. below the navbar

b. in the selected main tabs

The colors change when navigating in the repository classes.

### Technical Solution
> Add technical implementation details and the results of the tickets discussion here.

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================
Link to XD: https://xd.adobe.com/view/c6c402fa-d7f8-4b46-4c6f-dd6257402fb4-b0f5/

![image](/uploads/ca7909ae1d361b8fba154f99c5c064bf/image.png)

Story points: 4.0
Groups Navbar

### Problem to Solve
As a User, I want to be able to explore groups (similar to how projects are accessed) via the navbar. 

In order to not depend on the backend, recent / often visited group can be saved on the client (Cookie,...)

### Technical Solution

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================
Link to XD: https://xd.adobe.com/view/829b266c-e18b-4d1c-6ad9-3691c79c38a3-f4aa/

![Groups_Navbar](/uploads/1966677c06e6f93193265db5929e5750/Groups_Navbar.png)

Story points: 1.0
Fe Domain-driven design

### Problem to Solve
We currently have no domain model in the frontend, hence there is a little bit of mess regarding the flow of information through the application.


### Technical Solution
Explore the use of DDD(Domain-driven design) in the FE so that we have a consistent information model in the projet.


### Terminology
(DDD) Domain-driven design


Additional Notes
=====================
1. https://khalilstemmler.com/articles/typescript-domain-driven-design/ddd-frontend/
2. https://khalilstemmler.com/wiki/stable-dependency-principle/

Story points: 4.0
Insight / Job log

### Problem to Solve

Through the job tab in the insight menu I want to be able to access the log from specific jobs. This view can be access by clicking on:

![image](/uploads/98a4ca539aa7c49cf5e823992a7356fe/image.png) 

Relates to: frontend#254


### Technical Solution

The core elements of the view are almost exactly the same as from the experiment details / training log vie (add: "class" and change "experiment pipeline" to "pipeline"

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================

Link to XD: https://xd.adobe.com/view/324184e3-e127-48d8-5e24-568401dbcfe1-4470/

![Job_logs](/uploads/fe823a71ab6a5f941b96831a12a6974c/Job_logs.png)

Story points: 2.0
User profile v1

### Problem to Solve
As a user in Alpha I want to be able to see other user profile pages. As a first version, we only show a very limited view. 

This ticket relates to the more complete view: frontend#385

The information regarding every "ACTIVE" user in gitlab is required. The backend can provide with a user endpoint which enables the frontend to use the API and receive user information.
cc: @flohin

### Technical Solution
> Add technical implementation details and the results of the tickets discussion here.

* [ ]  Add at least one unit test
* [ ]  If useful: Add documentation to the readme


### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================

Link to XD: https://xd.adobe.com/view/df12316e-1fd1-42a2-7977-0f93cd346306-a923/

![User_Profile_V1](/uploads/b123586f8e2a93489adc73b9da30e733/User_Profile_V1.png)

Story points: 2.0
Backend: Create Marketplace Search&Filter endpoint

### Problem to Solve

The frontend needs to search in Marketplace, see the Spec: [3.1.3. Search the Marketplace](https://gitlab.com/mlreef/company/-/blob/master/Docs/Product/Requirements/req-3-marketplace.md#313-search-the-marketplace)

### Technical Solution
> Add technical implementation details and the results of the tickets discussion here.

* [x]  Add endpoint for paginated filtering
* [x]  add textual search for title and description
* [x]  add or-filter for dataType
* [x]  add and-filter for TAG
* [ ]  add star-filter

### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================
* https://dzone.com/articles/postgres-full-text-search
* https://www.digitalocean.com/community/tutorials/how-to-use-full-text-search-in-postgresql-on-ubuntu-16-04
* https://www.postgresql.org/docs/9.5/textsearch-intro.html

Story points: 6.0
Backend: Create Marketplace Entities and basic CRUD

### Problem to Solve

The backend shall provide the frontend the necessary Information for Marketplace Exploration.

The frontend must be able manipulate and retrieve the marketplace Entries, which are connected to Projects and Processors

needs kind of:
- title
- description
- multiple Tag
- owner
- stars (aggregated, stored)
- multiple DataTypes

needs new entities:
- starring
- tag
- tag relation
- has datatypes relation


* [x]  Add entity Marketplace Entry
* [x]  Add sub-entity or relation for Tags
* [x]  Add relation with DataTypes
* [x]  link to DataProject, CodeProject, and all DataProcessors
* [x]  Add endpoint for GET
* [ ]  Add endpoint for POST
* [ ]  Add endpoint for PUT
* [x]  Add endpoint for GET all

Story points: 4.0
Epic: Marketplace and Search (minimal)

### Problem to Solve

See Requirements here: https://gitlab.com/mlreef/company/-/blob/master/Docs/Product/Requirements/req-3-marketplace.md

### Technical Solution

* [x]  Backend: Create Marketplace Entries
* [x]  Backend: Update Marketplace Entries
* [x]  Backend: Get all Marketplace Entries (paginated)
* [x]  Backend: Find Entries via filter (paginated)
* [x]  Frontend: Add Datatypes to Data/Code Projects
* [x]  Frontend: Use Backend's Search endpoint for final productive view

Story points: 0.0
Adapt project creation view to include data types

### Problem to Solve
We need to adapt the project creation view to include data types and free tags to the projects. Please be aware, that each project class (ML project, model, data operation and data visualization) is a bit unique to each other. 

Attached are the different designs for each project class!


### Technical Solution

* [ ]  Adapt for ML Projects
* [ ]  Adapt for Models
* [ ]  Adapt for Data Operations
* [ ]  Adapt for Data Visualizations

### Terminology
> Define terms that are important in the context of this task


Additional Notes
=====================

**Note**: The texts in the different views change!

Link to **ML Projects** XD: https://xd.adobe.com/view/c1bef4a8-42a9-40b0-6669-00305c4adbd7-b78f/

Link to **Models** XD: https://xd.adobe.com/view/d8195b71-15c4-427c-4cac-f566c6f569f3-ae28/

Link to **Data Operations** XD: https://xd.adobe.com/view/71d53cb2-9bf6-49ad-4824-c11aec44f46e-07e4/

Link to **Data Visualization** XD: https://xd.adobe.com/view/d747bb09-471f-4084-7c68-37da0c5c6089-a176/

Story points: 2.0
Create complete URLs for Data pipelines View

### Problem to Solve
As a User, I want to be able to navigate to dynamic views through a generated URL. For example, I want to be able to access an experiment detail with `mlreef.com/…/-/experiments/:experiment-id`

We need this for the following views: 

* [x]  Experiment details: mlreef.com/…/-/experiments/:experiment-id
* [x]  Executed data pipelines (from datasets): mlreef.com/…/-/data-pipelines/:pipeline-id
* [x]  Insights/Jobs: mlreef.com/…/-/insights/jobs/:job-id


Info: The experiment ID is a counter that counts how many experiments within this project were done. @flohin we need this, please!

### Technical Solution
> Add technical implementation details and the results of the ticket's discussion here.


Additional Notes
=====================

Story points: 4.0