HasMany,
Is,
Model,
+ Scopes,
Table,
UpdatedAt
} from 'sequelize-typescript'
-import { Account } from '../../../shared/models/actors'
+import { Account, AccountSummary } from '../../../shared/models/actors'
import { isAccountDescriptionValid } from '../../helpers/custom-validators/accounts'
import { sendDeleteActor } from '../../lib/activitypub/send'
import { ActorModel } from '../activitypub/actor'
import { VideoChannelModel } from '../video/video-channel'
import { VideoCommentModel } from '../video/video-comment'
import { UserModel } from './user'
+import { AvatarModel } from '../avatar/avatar'
+import { VideoPlaylistModel } from '../video/video-playlist'
+import { WEBSERVER } from '../../initializers/constants'
+
+export enum ScopeNames {
+ SUMMARY = 'SUMMARY'
+}
@DefaultScope({
include: [
}
]
})
+@Scopes({
+ [ ScopeNames.SUMMARY ]: (whereActor?: Sequelize.WhereOptions<ActorModel>) => {
+ return {
+ attributes: [ 'id', 'name' ],
+ include: [
+ {
+ attributes: [ 'id', 'uuid', 'preferredUsername', 'url', 'serverId', 'avatarId' ],
+ model: ActorModel.unscoped(),
+ required: true,
+ where: whereActor,
+ include: [
+ {
+ attributes: [ 'host' ],
+ model: ServerModel.unscoped(),
+ required: false
+ },
+ {
+ model: AvatarModel.unscoped(),
+ required: false
+ }
+ ]
+ }
+ ]
+ }
+ }
+})
@Table({
tableName: 'account',
indexes: [
})
VideoChannels: VideoChannelModel[]
+ @HasMany(() => VideoPlaylistModel, {
+ foreignKey: {
+ allowNull: false
+ },
+ onDelete: 'cascade',
+ hooks: true
+ })
+ VideoPlaylists: VideoPlaylistModel[]
+
@HasMany(() => VideoCommentModel, {
foreignKey: {
allowNull: false
}
static load (id: number, transaction?: Sequelize.Transaction) {
- return AccountModel.findById(id, { transaction })
+ return AccountModel.findByPk(id, { transaction })
}
static loadByUUID (uuid: string) {
return AccountModel.findOne(query)
}
+ static loadByNameWithHost (nameWithHost: string) {
+ const [ accountName, host ] = nameWithHost.split('@')
+
+ if (!host || host === WEBSERVER.HOST) return AccountModel.loadLocalByName(accountName)
+
+ return AccountModel.loadByNameAndHost(accountName, host)
+ }
+
static loadLocalByName (name: string) {
const query = {
where: {
return Object.assign(actor, account)
}
+ toFormattedSummaryJSON (): AccountSummary {
+ const actor = this.Actor.toFormattedJSON()
+
+ return {
+ id: this.id,
+ uuid: actor.uuid,
+ name: actor.name,
+ displayName: this.getDisplayName(),
+ url: actor.url,
+ host: actor.host,
+ avatar: actor.avatar
+ }
+ }
+
toActivityPubObject () {
const obj = this.Actor.toActivityPubObject(this.name, 'Account')