diff --git a/client/src/app/shared/users/user.model.ts b/client/src/app/shared/users/user.model.ts
index f7859f495..09722704a 100644
--- a/client/src/app/shared/users/user.model.ts
+++ b/client/src/app/shared/users/user.model.ts
@@ -1,6 +1,9 @@
-export class User {
+import { User as UserServerModel } from '../../../../../shared';
+
+export class User implements UserServerModel {
id: number;
username: string;
+ email: string;
role: string;
displayNSFW: boolean;
createdAt: Date;
@@ -8,12 +11,14 @@ export class User {
constructor(hash: {
id: number,
username: string,
+ email: string,
role: string,
displayNSFW?: boolean,
createdAt?: Date,
}) {
this.id = hash.id;
this.username = hash.username;
+ this.email = hash.email;
this.role = hash.role;
this.displayNSFW = hash.displayNSFW;
diff --git a/client/src/app/videos/shared/video.model.ts b/client/src/app/videos/shared/video.model.ts
index fafdb4ac4..0cf4039df 100644
--- a/client/src/app/videos/shared/video.model.ts
+++ b/client/src/app/videos/shared/video.model.ts
@@ -1,17 +1,19 @@
+import { Video as VideoServerModel } from '../../../../../shared';
import { User } from '../../shared';
-export class Video {
+export class Video implements VideoServerModel {
author: string;
by: string;
createdAt: Date;
categoryLabel: string;
- category: string;
+ category: number;
licenceLabel: string;
- licence: string;
+ licence: number;
languageLabel: string;
- language: string;
+ language: number;
description: string;
- duration: string;
+ duration: number;
+ durationLabel: string;
id: string;
isLocal: boolean;
magnetUri: string;
@@ -41,11 +43,11 @@ export class Video {
author: string,
createdAt: string,
categoryLabel: string,
- category: string,
+ category: number,
licenceLabel: string,
- licence: string,
+ licence: number,
languageLabel: string;
- language: string;
+ language: number;
description: string,
duration: number;
id: string,
@@ -69,7 +71,8 @@ export class Video {
this.languageLabel = hash.languageLabel;
this.language = hash.language;
this.description = hash.description;
- this.duration = Video.createDurationString(hash.duration);
+ this.duration = hash.duration;
+ this.durationLabel = Video.createDurationString(hash.duration);
this.id = hash.id;
this.isLocal = hash.isLocal;
this.magnetUri = hash.magnetUri;
diff --git a/client/src/app/videos/video-list/video-miniature.component.html b/client/src/app/videos/video-list/video-miniature.component.html
index 648ef61b1..b1b881fea 100644
--- a/client/src/app/videos/video-list/video-miniature.component.html
+++ b/client/src/app/videos/video-list/video-miniature.component.html
@@ -10,7 +10,7 @@
{{ video.views }} views
- {{ video.duration }}
+ {{ video.durationLabel }}
diff --git a/server/middlewares/validators/videos.ts b/server/middlewares/validators/videos.ts
index e99cdefb1..03742a522 100644
--- a/server/middlewares/validators/videos.ts
+++ b/server/middlewares/validators/videos.ts
@@ -8,7 +8,9 @@ import { CONSTRAINTS_FIELDS, SEARCHABLE_COLUMNS } from '../../initializers'
import { logger, isVideoDurationValid } from '../../helpers'
function videosAddValidator (req: express.Request, res: express.Response, next: express.NextFunction) {
- req.checkBody('videofile', 'Should have a valid file').isVideoFile(req.files)
+ // FIXME: Don't write an error message, it seems there is a bug with express-validator
+ // 'Should have a valid file'
+ req.checkBody('videofile').isVideoFile(req.files)
req.checkBody('name', 'Should have a valid name').isVideoNameValid()
req.checkBody('category', 'Should have a valid category').isVideoCategoryValid()
req.checkBody('licence', 'Should have a valid licence').isVideoLicenceValid()
diff --git a/server/models/user.ts b/server/models/user.ts
index 0fbfdda50..cd383a16a 100644
--- a/server/models/user.ts
+++ b/server/models/user.ts
@@ -135,7 +135,7 @@ isPasswordMatch = function (password: string, callback: UserMethods.IsPasswordMa
return comparePassword(password, this.password, callback)
}
-toFormatedJSON = function () {
+toFormatedJSON = function (this: UserInstance) {
return {
id: this.id,
username: this.username,
diff --git a/server/models/video.ts b/server/models/video.ts
index 3f808b811..2234664f4 100644
--- a/server/models/video.ts
+++ b/server/models/video.ts
@@ -447,7 +447,7 @@ isOwned = function () {
return this.remoteId === null
}
-toFormatedJSON = function () {
+toFormatedJSON = function (this: VideoInstance) {
let podHost
if (this.Author.Pod) {
@@ -488,7 +488,7 @@ toFormatedJSON = function () {
views: this.views,
likes: this.likes,
dislikes: this.dislikes,
- tags: map(this.Tags, 'name'),
+ tags: map(this.Tags, 'name'),
thumbnailPath: join(STATIC_PATHS.THUMBNAILS, this.getThumbnailName()),
createdAt: this.createdAt,
updatedAt: this.updatedAt
diff --git a/shared/models/user.model.ts b/shared/models/user.model.ts
index 01cc380d3..a6be359d3 100644
--- a/shared/models/user.model.ts
+++ b/shared/models/user.model.ts
@@ -3,6 +3,6 @@ export interface User {
username: string
email: string
displayNSFW: boolean
- role: string[]
+ role: string
createdAt: Date
}
diff --git a/shared/models/video.model.ts b/shared/models/video.model.ts
index 355e912d2..2e35f005c 100644
--- a/shared/models/video.model.ts
+++ b/shared/models/video.model.ts
@@ -1,3 +1,23 @@
export interface Video {
-
+ id: string
+ author: string
+ createdAt: Date
+ categoryLabel: string
+ category: number
+ licenceLabel: string
+ licence: number
+ languageLabel: string
+ language: number
+ description: string
+ duration: number
+ isLocal: boolean
+ magnetUri: string
+ name: string
+ podHost: string
+ tags: string[]
+ thumbnailPath: string
+ views: number
+ likes: number
+ dislikes: number
+ nsfw: boolean
}
diff --git a/support/doc/client/code.md b/support/doc/client/code.md
index f629af32f..c1a5c1c5f 100644
--- a/support/doc/client/code.md
+++ b/support/doc/client/code.md
@@ -1,14 +1,14 @@
# Client code documentation
-The client is a HTML/CSS/JavaScript web application (single page application -> SPA) developed with [TypeScript](https://www.typescriptlang.org/)/[Angular 2](https://angular.io/).
+The client is a HTML/CSS/JavaScript web application (single page application -> SPA) developed with [TypeScript](https://www.typescriptlang.org/)/[Angular](https://angular.io/).
## Technologies
* [TypeScript](https://www.typescriptlang.org/) -> Language
- * [Angular 2](https://angular.io) -> JavaScript framework
+ * [Angular](https://angular.io) -> JavaScript framework
* [SASS](http://sass-lang.com/) -> CSS framework
- * [Webpack 2](https://webpack.github.io/docs/) -> Source builder (compile TypeScript, SASS files, bundle them...)
+ * [Webpack](https://webpack.github.io/docs/) -> Source builder (compile TypeScript, SASS files, bundle them...)
* [Bootstrap](http://getbootstrap.com/) -> CSS framework
* [WebTorrent](https://webtorrent.io/) -> JavaScript library to make P2P in the browser
* [VideoJS](http://videojs.com/) -> JavaScript player framework
@@ -25,16 +25,16 @@ Here is the description of the useful `client` files directory:
.bootstraprc -> Bootstrap configuration file (which module we need)
config -> Webpack configuration files
src
- |__ app -> TypeScript files for Angular 2 application
+ |__ app -> TypeScript files for Angular application
|__ assets -> static files (images...)
|__ sass -> SASS files that are global for the application
|__ standalone -> files outside the Angular application (embed HTML page...)
- |__ index.html -> root HTML file for our Angular 2 application
- |__ main.ts -> Main TypeScript file that boostraps our Angular 2 application
+ |__ index.html -> root HTML file for our Angular application
+ |__ main.ts -> Main TypeScript file that boostraps our Angular application
|__ polyfills.ts -> Polyfills imports (ES 2015...)
|__ vendor.ts -> Vendor imports (Angular, Bootstrap...)
-Details of the Angular 2 application file structure. It tries to follow [the official Angular 2 styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html).
+Details of the Angular application file structure. It tries to follow [the official Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html).
app
|__ account -> Account components (password change...)
@@ -44,11 +44,11 @@ Details of the Angular 2 application file structure. It tries to follow [the off
|__ shared -> Shared components/services (search component, REST services...)
|__ videos -> Video components (list, watch, upload...)
|__ app.component.{html,scss,ts} -> Main application component
- |__ app.module.ts -> Angular 2 root module that imports all submodules we need
+ |__ app.module.ts -> Angular root module that imports all submodules we need
## Conventions
-Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [Angular 2 styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html).
+Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html).
## Developing
@@ -57,8 +57,8 @@ Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [An
* Run PostgreSQL and create the database `peertube_dev`.
* Run `npm run dev` to compile the client and automatically run the server. Then the server will watch and compile the client files automatically. You just need to refresh the browser to see your modifications.
-In a Angular 2 application, we create components that we put together. Each component is defined by an HTML structure, a TypeScript file and optionnaly a SASS file.
-If you are not familiar with Angular 2 I recommend you to read the [quickstart guide](https://angular.io/docs/ts/latest/quickstart.html).
+In a Angular application, we create components that we put together. Each component is defined by an HTML structure, a TypeScript file and optionnaly a SASS file.
+If you are not familiar with Angular I recommend you to read the [quickstart guide](https://angular.io/docs/ts/latest/quickstart.html).
## Components tree
diff --git a/support/doc/server/code.md b/support/doc/server/code.md
index c15885c8c..76d11c963 100644
--- a/support/doc/server/code.md
+++ b/support/doc/server/code.md
@@ -1,11 +1,11 @@
# Server code documentation
-The server is a web server developed with [NodeJS](https://nodejs.org)/[Express](http://expressjs.com).
+The server is a web server developed with [TypeScript](https://www.typescriptlang.org/)/[Express](http://expressjs.com).
## Technologies
- * [NodeJS](https://nodejs.org) -> Language
+ * [TypeScript](https://www.typescriptlang.org/) -> Language
* [PostgreSQL](https://www.postgresql.org/) -> Database
* [Express](http://expressjs.com) -> Web server framework
* [Sequelize](http://docs.sequelizejs.com/en/v3/) -> SQL ORM
@@ -15,11 +15,11 @@ The server is a web server developed with [NodeJS](https://nodejs.org)/[Express]
## Files
-The server main file is [server.js](https://github.com/Chocobozzz/PeerTube/blob/master/server.js).
+The server main file is [server.ts](https://github.com/Chocobozzz/PeerTube/blob/master/server.ts).
The server modules description are in the [package.json](https://github.com/Chocobozzz/PeerTube/blob/master/package.json) at the project root.
All other server files are in the [server](https://github.com/Chocobozzz/PeerTube/tree/master/server) directory:
- server.js -> app initilization, main routes configuration (static routes...)
+ server.ts -> app initilization, main routes configuration (static routes...)
config -> server YAML configurations (for tests, production...)
scripts -> Scripts files for npm run
server
@@ -42,9 +42,9 @@ Uses [JavaScript Standard Style](http://standardjs.com/).
* Install [the dependencies](https://github.com/Chocobozzz/PeerTube#dependencies)
* Run `npm install` at the root directory to install all the dependencies
* Run PostgreSQL and create the database `peertube_dev`.
- * Run `npm run dev` to compile the client and automatically run the server. If the client files are already compiled you can simply run `NODE_ENV=test node server`
+ * Run `npm run dev` to compile the client and automatically run the server. If the client files are already compiled you can simply run `NODE_ENV=test node dist/server`
-The `NODE_ENV=test` is set to speed up communications between pods (see [constants.js](https://github.com/Chocobozzz/PeerTube/blob/master/server/initializers/constants.js)).
+The `NODE_ENV=test` is set to speed up communications between pods (see [constants.ts](https://github.com/Chocobozzz/PeerTube/blob/master/server/initializers/constants.ts)).
`npm run help` gives you all available commands.
@@ -68,5 +68,5 @@ If a user wants to watch the video, the tracker will indicate all other users th
## Newcomers
-The server entrypoint is [server.js](https://github.com/Chocobozzz/PeerTube/blob/master/server.js). You can begin to look at this file.
+The server entrypoint is [server.ts](https://github.com/Chocobozzz/PeerTube/blob/master/server.ts). You can begin to look at this file.
Then you can try to understand the [controllers](https://github.com/Chocobozzz/PeerTube/tree/master/server/controllers): they are the entrypoint of each API request.