aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/account/user.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/models/account/user.ts')
-rw-r--r--server/models/account/user.ts31
1 files changed, 26 insertions, 5 deletions
diff --git a/server/models/account/user.ts b/server/models/account/user.ts
index 3a339b5c3..8bd41de22 100644
--- a/server/models/account/user.ts
+++ b/server/models/account/user.ts
@@ -19,7 +19,7 @@ import {
19 Table, 19 Table,
20 UpdatedAt 20 UpdatedAt
21} from 'sequelize-typescript' 21} from 'sequelize-typescript'
22import { hasUserRight, USER_ROLE_LABELS, UserRight, VideoPrivacy } from '../../../shared' 22import { hasUserRight, USER_ROLE_LABELS, UserRight, VideoPrivacy, MyUser } from '../../../shared'
23import { User, UserRole } from '../../../shared/models/users' 23import { User, UserRole } from '../../../shared/models/users'
24import { 24import {
25 isNoInstanceConfigWarningModal, 25 isNoInstanceConfigWarningModal,
@@ -45,6 +45,7 @@ import { comparePassword, cryptPassword } from '../../helpers/peertube-crypto'
45import { OAuthTokenModel } from '../oauth/oauth-token' 45import { OAuthTokenModel } from '../oauth/oauth-token'
46import { getSort, throwIfNotValid } from '../utils' 46import { getSort, throwIfNotValid } from '../utils'
47import { VideoChannelModel } from '../video/video-channel' 47import { VideoChannelModel } from '../video/video-channel'
48import { VideoPlaylistModel } from '../video/video-playlist'
48import { AccountModel } from './account' 49import { AccountModel } from './account'
49import { NSFWPolicyType } from '../../../shared/models/videos/nsfw-policy.type' 50import { NSFWPolicyType } from '../../../shared/models/videos/nsfw-policy.type'
50import { values } from 'lodash' 51import { values } from 'lodash'
@@ -68,7 +69,8 @@ import {
68} from '@server/typings/models' 69} from '@server/typings/models'
69 70
70enum ScopeNames { 71enum ScopeNames {
71 WITH_VIDEO_CHANNEL = 'WITH_VIDEO_CHANNEL' 72 WITH_VIDEO_CHANNEL = 'WITH_VIDEO_CHANNEL',
73 WITH_SPECIAL_PLAYLISTS = 'WITH_SPECIAL_PLAYLISTS'
72} 74}
73 75
74@DefaultScope(() => ({ 76@DefaultScope(() => ({
@@ -96,6 +98,16 @@ enum ScopeNames {
96 required: true 98 required: true
97 } 99 }
98 ] 100 ]
101 },
102 [ScopeNames.WITH_SPECIAL_PLAYLISTS]: {
103 attributes: {
104 include: [
105 [
106 literal('(select array(select "id" from "videoPlaylist" where "ownerAccountId" in (select id from public.account where "userId" = "UserModel"."id") and name LIKE \'Watch later\'))'),
107 'specialPlaylists'
108 ]
109 ]
110 }
99 } 111 }
100})) 112}))
101@Table({ 113@Table({
@@ -431,7 +443,10 @@ export class UserModel extends Model<UserModel> {
431 } 443 }
432 } 444 }
433 445
434 return UserModel.scope(ScopeNames.WITH_VIDEO_CHANNEL).findOne(query) 446 return UserModel.scope([
447 ScopeNames.WITH_VIDEO_CHANNEL,
448 ScopeNames.WITH_SPECIAL_PLAYLISTS
449 ]).findOne(query)
435 } 450 }
436 451
437 static loadByEmail (email: string): Bluebird<MUserDefault> { 452 static loadByEmail (email: string): Bluebird<MUserDefault> {
@@ -610,11 +625,11 @@ export class UserModel extends Model<UserModel> {
610 return comparePassword(password, this.password) 625 return comparePassword(password, this.password)
611 } 626 }
612 627
613 toFormattedJSON (this: MUserFormattable, parameters: { withAdminFlags?: boolean } = {}): User { 628 toFormattedJSON (this: MUserFormattable, parameters: { withAdminFlags?: boolean, me?: boolean } = {}): User | MyUser {
614 const videoQuotaUsed = this.get('videoQuotaUsed') 629 const videoQuotaUsed = this.get('videoQuotaUsed')
615 const videoQuotaUsedDaily = this.get('videoQuotaUsedDaily') 630 const videoQuotaUsedDaily = this.get('videoQuotaUsedDaily')
616 631
617 const json: User = { 632 const json: User | MyUser = {
618 id: this.id, 633 id: this.id,
619 username: this.username, 634 username: this.username,
620 email: this.email, 635 email: this.email,
@@ -675,6 +690,12 @@ export class UserModel extends Model<UserModel> {
675 }) 690 })
676 } 691 }
677 692
693 if (parameters.me) {
694 Object.assign(json, {
695 specialPlaylists: (this.get('specialPlaylists') as Array<number>).map(p => ({ id: p }))
696 })
697 }
698
678 return json 699 return json
679 } 700 }
680 701