Commit b028fdc1 authored by Nicolas Richard Walter Boeckh's avatar Nicolas Richard Walter Boeckh 💬
Browse files

README | CAHIER CHARGES

parent b0cfd2d4
# Cahier des Charges pour Projet Transverse I
## Authors
| Nom | Profil GitLab | Email |
|:--- |:---:|:---:|
| Clément Jeannet | [Link](https://gitlab.unige.ch/Clement.Jeannet) | [Mailto](mailto:clement.jeannet@etu.unige.ch) |
| Nicolas Boeckh | [Link](https://gitlab.unige.ch/Nicolas.Boeckh) | [Mailto](mailto:nicolas.boeckh@etu.unige.ch) |
## Version
`0.0.2`
## Navigation
- [Définition](#définition)
- [Description du projet](#description-du-projet)
- [Périmètre](#périmètre)
- [Objectifs principaux](#objectifs-principaux)
- [Exigences](#exigences)
- [Compte Utilisateur](#compte-utilisateur)
- [Publications](#publications)
- [Commentaires](#commentaires)
- [Groupes](#groupes)
- [Intéraction Publication/Commentaire](#intéraction-publication/commentaire)
___
## Définition
([Back to top](#navigation))
Le projet consiste à réaliser un forum de discussion similaire à [reddit.com](https://reddit.com) ou [inilab.ch](https://inilab.ch).
Il faut pouvoir initier des discussions, regrouper dynamiquement les sujets de discussion démarrés de manière indépendante selon leur similarité, permettre de commenter plus une discussion ou un commentaire sur une discussion, visualiser le tout.
Possibilité de voter les commentaires. Lister les discussions selon leur popularité (nombre de commentaires ou nombre de personnes qui font des commentaires). Pour une discussion donnée, montrer tous les commentaires votés positivement et négativement.
___
## Description du projet
([Back to top](#navigation))
Nous désirons réaliser un forum de discussion structurée 'à la Reddit', permettant aux utilisateurs d'intéragir et de communiquer au sein de groupes, ainsi que d'exprimer leurs opinions quant aux publications d'autres utilisateurs.
___
## Périmètre
([Back to top](#navigation))
Les populations francophones (restriction pour l'analyse sémantique).
___
## Objectifs principaux
([Back to top](#navigation))
Un utilisateur doit pouvoir consulter le forum librement afin de parcourir les groupes et ses publications.
Il doit pouvoir créer et se logger avec un compte pour changer son expérience au sein du forum, en distribuant du contenu auquel il s'est abonné.
Il doit pouvoir utiliser le forum pour publier, commenter et voter sur des publications.
___
## Exigences
([Back to top](#navigation))
### Compte Utilisateur
- Permettre de créer un compte ;
- Permettre de se logger/délogger de son compte ;
- Permetrre de supprimer son compte (prompt danger) ;
- Permettre de changer nom d'utilisateur et/ou email et/ou mot de passe ;
- Permettre de définir une image ;
- (Fonctionnalité Optionelle) Permettre de gérer les paramètres de son compte ;
### Publications
- Créer un post (définir sujet, groupe, contenu, thèmes) ;
- (Fonctionnalité Optionnelle) Éditer un post ;
- Supprimer un post (prompt danger) ;
### Commentaires
- Choix du parent (post ou commentaire) ;
- Définir du contenu ;
- Supprimer un commentaire (prompt danger) ;
- (Fonctionnalité Optionnelle) Éditer un commentaires ;
### Groupes
- Créer un groupe (titre, description, image) ;
- Supprimer groupe (prompt danger | uniquement propriétaire) ;
- Modifier description ;
- Modifier image ;
### Intéraction Publication/Commentaire
- Voter sur une publication ou un cmmentaire ;
- Permettre de partager une publication ;
- Permettre de signaler une publication ou un commentaire ;
# README for `pti`
## Instruction
### Idée
Le projet consiste à réaliser un forum de discussion similaire à [reddit.com](https://reddit.com) ou [inilab.ch](https://inilab.ch).
Il faut pouvoir initier des discussions, regrouper dynamiquement les sujets de discussion démarrés de manière indépendante selon leur similarité, permettre de commenter plus une discussion ou un commentaire sur une discussion, visualiser le tout.
Possibilité de voter les commentaires. Lister les discussions selon leur popularité (nombre de commentaires ou nombre de personnes qui font des commentaires). Pour une discussion donnée, montrer tous les commentaires votés positivement et négativement.
### Algorithme
Similarité des discussions, analyse sémantique, ré-organiser les postes par thèmes (e.g. arguments liés à la finance, …)
Diff implementation
### Données
Générer/collecter des données à partir des forums
## Desired Functionalities
- Login (username || email, password)
- Sign up form (Captcha)
- Template (Post) [type: text || image || video, title, flavor: tags, upvotes, user, (group)]
- Template (Comment) [type: text || image, title, upvotes, user]
- Timeline () : Sortable by Hot, by New, by Controversial, only certain groups
- Search for group
## DB Elements
- `USER` : username, email, password SHA_256 + salt, description, follows (`FOLLOWS*`), miniature (image), preferences (`PREFERENCES`), confirmed
- `POST` : poster (`USER`), upvotes (`UPVOTE*`), content, since, comments (`COMMENT*`)
- `POST_INIT` (`instance:POST`) : title, flavor (`FLAVOR*`), group (`GROUP`),
- `COMMENT` (`instance:POST`) : depth
- `GROUP` : image, description, followers (`FOLLOWS*`), since, moderators (`USER*`)
- `FOLLOWS` : user (`USER`), follow (`GROUP`), since
- `UPVOTE` : user (`USER`), post (`POST`)
- `PREFERENCES` : theme, (lang),
## Scenarii
### Sign Up
Actors : John Doe
John Doe wishes to sign up to the platform.
Since he is not signed in, he can only see the sign up button in the header.
He presses it, and is redirected to the sign up page.
There he enters his username, email, password, password confirm and confirms he is not a robot, he also accepts the SLA (/sells his soul to the devil), then presses confirm.
If any of the previous conditions generate errors, he has to complete it with non-error generating things.
He will need to enter a 6 digit code sent to him by email (he can go back and fill in a real email if not real), option to resend, becomes invalid after 5 minutes.
After this he can submit the form and the account is created.
He receives a confirmation email *without* the password.
# README for `pti`
## Authors
| Nom | Profil GitLab | Email |
|:--- |:---:|:---:|
| Clément Jeannet | [Link](https://gitlab.unige.ch/Clement.Jeannet) | [Mailto](mailto:clement.jeannet@etu.unige.ch) |
| Nicolas Boeckh | [Link](https://gitlab.unige.ch/Nicolas.Boeckh) | [Mailto](mailto:nicolas.boeckh@etu.unige.ch) |
## Navigation
- [Instruction](#instruction)
- [Idée](#idée)
- [Algorithme](#algorithme)
- [Données](#données)
- [Fonctionnalités Désirées](#fonctionnalités-désirées)
- [DB Elements](#db-elements)
- [Scenarii](#scenarii)
- [Sign up](#sign-up)
___
## Instruction
([Back to top](#navigation))
### Idée
Le projet consiste à réaliser un forum de discussion similaire à [reddit.com](https://reddit.com) ou [inilab.ch](https://inilab.ch).
Il faut pouvoir initier des discussions, regrouper dynamiquement les sujets de discussion démarrés de manière indépendante selon leur similarité, permettre de commenter plus une discussion ou un commentaire sur une discussion, visualiser le tout.
Possibilité de voter les commentaires. Lister les discussions selon leur popularité (nombre de commentaires ou nombre de personnes qui font des commentaires). Pour une discussion donnée, montrer tous les commentaires votés positivement et négativement.
### Algorithme
Similarité des discussions, analyse sémantique, ré-organiser les postes par thèmes (e.g. arguments liés à la finance, …)
Diff implementation
### Données
Générer/collecter des données à partir des forums
___
## Fonctionnalités désirées
([Back to top](#navigation))
- Login (username || email, password)
- Sign up form (Captcha)
- Template (Post) [type: text || image || video, title, flavor: tags, upvotes, user, (group)]
- Template (Comment) [type: text || image, title, upvotes, user]
- Timeline () : Sortable by Hot, by New, by Controversial, only certain groups
- Search for group
___
## DB Elements
([Back to top](#navigation))
- `USER` : username, email, password SHA_256 + salt, description, follows (`FOLLOWS*`), miniature (image), preferences (`PREFERENCES`), confirmed
- `POST` : poster (`USER`), upvotes (`UPVOTE*`), content, since, comments (`COMMENT*`)
- `POST_INIT` (`instance:POST`) : title, flavor (`FLAVOR*`), group (`GROUP`),
- `COMMENT` (`instance:POST`) : depth
- `GROUP` : image, description, followers (`FOLLOWS*`), since, moderators (`USER*`)
- `FOLLOWS` : user (`USER`), follow (`GROUP`), since
- `UPVOTE` : user (`USER`), post (`POST`)
- `PREFERENCES` : theme, (lang),
___
## Scenarii
([Back to top](#navigation))
### Sign Up
Actors : John Doe
John Doe wishes to sign up to the platform.
Since he is not signed in, he can only see the sign up button in the header.
He presses it, and is redirected to the sign up page.
There he enters his username, email, password, password confirm and confirms he is not a robot, he also accepts the SLA (/sells his soul to the devil), then presses confirm.
If any of the previous conditions generate errors, he has to complete it with non-error generating things.
He will need to enter a 6 digit code sent to him by email (he can go back and fill in a real email if not real), option to resend, becomes invalid after 5 minutes.
After this he can submit the form and the account is created.
He receives a confirmation email *without* the password.
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
/out-tsc
# Only exists if Bazel was run
/bazel-out
# dependencies
/node_modules
# profiling files
chrome-profiler-events*.json
speed-measure-plugin*.json
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
Thumbs.db
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
/out-tsc
# Only exists if Bazel was run
/bazel-out
# dependencies
/node_modules
# profiling files
chrome-profiler-events*.json
speed-measure-plugin*.json
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
Thumbs.db
# FakeIt
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.0.3.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
# FakeIt
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.0.3.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"fake-it": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/fake-it",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": true,
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "fake-it:build"
},
"configurations": {
"production": {
"browserTarget": "fake-it:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "fake-it:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"tsconfig.app.json",
"tsconfig.spec.json",
"e2e/tsconfig.json"
],
"exclude": [
"**/node_modules/**"
]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "fake-it:serve"
},
"configurations": {
"production": {
"devServerTarget": "fake-it:serve:production"
}
}
}
}
}},
"defaultProject": "fake-it"
}
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"fake-it": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/fake-it",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": true,
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
"serve": {