summaryrefslogtreecommitdiff
path: root/src/models
diff options
context:
space:
mode:
Diffstat (limited to 'src/models')
-rw-r--r--src/models/entities/user-group-invite.ts42
-rw-r--r--src/models/entities/user-group-joining.ts1
-rw-r--r--src/models/index.ts2
-rw-r--r--src/models/repositories/user-group-invite.ts24
4 files changed, 69 insertions, 0 deletions
diff --git a/src/models/entities/user-group-invite.ts b/src/models/entities/user-group-invite.ts
new file mode 100644
index 0000000000..2adf2c024e
--- /dev/null
+++ b/src/models/entities/user-group-invite.ts
@@ -0,0 +1,42 @@
+import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
+import { User } from './user';
+import { UserGroup } from './user-group';
+import { id } from '../id';
+
+@Entity()
+@Index(['userId', 'userGroupId'], { unique: true })
+export class UserGroupInvite {
+ @PrimaryColumn(id())
+ public id: string;
+
+ @Column('timestamp with time zone', {
+ comment: 'The created date of the UserGroupInvite.'
+ })
+ public createdAt: Date;
+
+ @Index()
+ @Column({
+ ...id(),
+ comment: 'The user ID.'
+ })
+ public userId: User['id'];
+
+ @ManyToOne(type => User, {
+ onDelete: 'CASCADE'
+ })
+ @JoinColumn()
+ public user: User | null;
+
+ @Index()
+ @Column({
+ ...id(),
+ comment: 'The group ID.'
+ })
+ public userGroupId: UserGroup['id'];
+
+ @ManyToOne(type => UserGroup, {
+ onDelete: 'CASCADE'
+ })
+ @JoinColumn()
+ public userGroup: UserGroup | null;
+}
diff --git a/src/models/entities/user-group-joining.ts b/src/models/entities/user-group-joining.ts
index 17b534f42f..e09c3230f1 100644
--- a/src/models/entities/user-group-joining.ts
+++ b/src/models/entities/user-group-joining.ts
@@ -4,6 +4,7 @@ import { UserGroup } from './user-group';
import { id } from '../id';
@Entity()
+@Index(['userId', 'userGroupId'], { unique: true })
export class UserGroupJoining {
@PrimaryColumn(id())
public id: string;
diff --git a/src/models/index.ts b/src/models/index.ts
index c05d7febe5..a60cd10ef9 100644
--- a/src/models/index.ts
+++ b/src/models/index.ts
@@ -22,6 +22,7 @@ import { UserListRepository } from './repositories/user-list';
import { UserListJoining } from './entities/user-list-joining';
import { UserGroupRepository } from './repositories/user-group';
import { UserGroupJoining } from './entities/user-group-joining';
+import { UserGroupInviteRepository } from './repositories/user-group-invite';
import { FollowRequestRepository } from './repositories/follow-request';
import { MutingRepository } from './repositories/muting';
import { BlockingRepository } from './repositories/blocking';
@@ -56,6 +57,7 @@ export const UserLists = getCustomRepository(UserListRepository);
export const UserListJoinings = getRepository(UserListJoining);
export const UserGroups = getCustomRepository(UserGroupRepository);
export const UserGroupJoinings = getRepository(UserGroupJoining);
+export const UserGroupInvites = getCustomRepository(UserGroupInviteRepository);
export const UserNotePinings = getRepository(UserNotePining);
export const Followings = getCustomRepository(FollowingRepository);
export const FollowRequests = getCustomRepository(FollowRequestRepository);
diff --git a/src/models/repositories/user-group-invite.ts b/src/models/repositories/user-group-invite.ts
new file mode 100644
index 0000000000..1d4c2aa15f
--- /dev/null
+++ b/src/models/repositories/user-group-invite.ts
@@ -0,0 +1,24 @@
+import { EntityRepository, Repository } from 'typeorm';
+import { UserGroupInvite } from '../entities/user-group-invite';
+import { UserGroups } from '..';
+import { ensure } from '../../prelude/ensure';
+
+@EntityRepository(UserGroupInvite)
+export class UserGroupInviteRepository extends Repository<UserGroupInvite> {
+ public async pack(
+ src: UserGroupInvite['id'] | UserGroupInvite,
+ ) {
+ const invite = typeof src === 'object' ? src : await this.findOne(src).then(ensure);
+
+ return {
+ id: invite.id,
+ group: await UserGroups.pack(invite.userGroup || invite.userGroupId),
+ };
+ }
+
+ public packMany(
+ invites: any[],
+ ) {
+ return Promise.all(invites.map(x => this.pack(x)));
+ }
+}