Use shared models
This commit is contained in:
parent
75fb0c0b2e
commit
69f616ab3a
10 changed files with 65 additions and 35 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
<div class="video-miniature-thumbnail-overlay">
|
||||
<span class="video-miniature-thumbnail-overlay-views">{{ video.views }} views</span>
|
||||
<span class="video-miniature-thumbnail-overlay-duration">{{ video.duration }}</span>
|
||||
<span class="video-miniature-thumbnail-overlay-duration">{{ video.durationLabel }}</span>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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<VideoTagInstance, string>(this.Tags, 'name'),
|
||||
thumbnailPath: join(STATIC_PATHS.THUMBNAILS, this.getThumbnailName()),
|
||||
createdAt: this.createdAt,
|
||||
updatedAt: this.updatedAt
|
||||
|
|
|
@ -3,6 +3,6 @@ export interface User {
|
|||
username: string
|
||||
email: string
|
||||
displayNSFW: boolean
|
||||
role: string[]
|
||||
role: string
|
||||
createdAt: Date
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue