Skip to content
This repository has been archived by the owner on Mar 27, 2020. It is now read-only.

[WIP] Implement mute #83

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/db/db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import talkGroupInvitation from './schemas/talk-group-invitation';
import {talkHistory, talkUserHistory, talkGroupHistory} from './schemas/talk-history';
import user from './schemas/user';
import userFollowing from './schemas/user-following';
import userMute from './schemas/user-mute';

/* tslint:disable:variable-name */
export const AlbumFile = albumFile(db);
Expand Down Expand Up @@ -54,3 +55,4 @@ export const TalkGroup = talkGroup(db);
export const TalkGroupInvitation = talkGroupInvitation(db);
export const User = user(db);
export const UserFollowing = userFollowing(db);
export const UserMute = userMute(db);
7 changes: 7 additions & 0 deletions src/db/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ export interface IUserFollowing extends Document {
follower: string | Types.ObjectId | IUser;
}

export interface IUserMute extends Document {
createdAt: Date;
cursor: number;
muter: string | Types.ObjectId | IUser;
mutee: string | Types.ObjectId | IUser;
}

export interface IUserKey extends Document {
app: string | Types.ObjectId | IApplication;
key: string;
Expand Down
21 changes: 21 additions & 0 deletions src/db/schemas/user-mute.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import {Schema, Connection, Document, Model} from 'mongoose';
import * as mongooseAutoIncrement from 'mongoose-auto-increment';

export default function(db: Connection): Model<Document> {
mongooseAutoIncrement.initialize(db);

const schema = new Schema({
createdAt: { type: Date, required: true, default: Date.now },
cursor: { type: Number },
muter: { type: Schema.Types.ObjectId, required: true, ref: 'User' },
mutee: { type: Schema.Types.ObjectId, required: true, ref: 'User' }
});

// Auto increment
schema.plugin(mongooseAutoIncrement.plugin, {
model: 'UserMute',
field: 'cursor'
});

return db.model('UserMute', schema, 'UserMutes');
}
41 changes: 41 additions & 0 deletions src/endpoints/users/mute.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import {UserMute, User} from '../../db/db';
import {IUserMute, IUser} from '../../db/interfaces';

/**
* ユーザーをミュートします
* @param muter ミュートするユーザー
* @param muteeId ミュートされるユーザーID
*/
export default function(muter: IUser, muteeId: string): Promise<void> {
return new Promise<void>((resolve, reject) => {
if (muter.id.toString() === muteeId) {
return reject('mutee-is-you');
}
User.findById(muteeId, (userFindErr: any, mutee: IUser) => {
if (userFindErr !== null) {
return reject(userFindErr);
} else if (mutee === null) {
return reject('mutee-not-found');
}
UserMute.findOne({
mutee: muteeId,
muter: muter.id
}, (muteFindErr: any, userMute: IUserMute) => {
if (muteFindErr !== null) {
return reject(muteFindErr);
} else if (userMute !== null) {
return reject('already-mute');
}
UserMute.create({
mutee: muteeId,
muter: muter.id
}, (createErr: any, createdUserMute: IUserMute) => {
if (createErr !== null) {
return reject(createErr);
}
resolve();
});
});
});
});
}
42 changes: 42 additions & 0 deletions src/endpoints/users/unmute.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import {UserMute, User} from '../../db/db';
import {IUserMute, IUser} from '../../db/interfaces';

/**
* ユーザーのミュートを解除します
* @param muter: ミュートを解除するユーザー
* @param muteeId: ミュートを解除されるユーザーID
*/
export default function(muter: IUser, muteeId: string): Promise<void> {
return new Promise<void>((resolve, reject) => {
if (muter.id.toString() === muteeId) {
reject('mutee-is-you');
} else {
User.findById(muteeId, (userFindErr: any, mutee: IUser) => {
if (userFindErr !== null) {
reject(userFindErr);
} else if (mutee === null) {
reject('mutee-not-found');
} else {
UserMute.findOne({
mutee: muteeId,
muter: muter.id
}, (muteFindErr: any, userMute: IUserMute) => {
if (muteFindErr !== null) {
reject(muteFindErr);
} else if (userMute === null) {
reject("not-mute");
} else {
userMute.remove((muteRemoveErr: any) => {
if (muteRemoveErr !== null) {
reject(muteRemoveErr);
} else {
resolve();
}
});
}
});
}
});
}
});
}
19 changes: 19 additions & 0 deletions src/rest-handlers/users/mute.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import {IApplication, IUser} from '../../db/interfaces';
import mute from '../../endpoints/users/mute';

export default function(
app: IApplication,
user: IUser,
req: any,
res: any
): void {
if (req.payload['user-id'] === undefined || req.payload['user-id'] === null) {
res('user-id-is-empty').code(400);
} else {
mute(user, req.payload['user-id']).then(() => {
res({kyoppie: 'yuppie'});
}, (err: any) => {
res({error: err}).code(500);
});
}
};
19 changes: 19 additions & 0 deletions src/rest-handlers/users/unmute.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import {IApplication, IUser} from '../../db/interfaces';
import unmute from '../../endpoints/users/unmute';

export default function(
app: IApplication,
user: IUser,
req: any,
res: any
): void {
if (req.payload['user-id'] === undefined || req.payload['user-id'] === null) {
res('user-id-is-empty').code(400);
} else {
unmute(user, req.payload['user-id']).then(() => {
res({kyoppie: 'yuppie'});
}, (err: any) => {
res({error: err}).code(500);
});
}
};
5 changes: 5 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"./src/db/schemas/user-following.ts",
"./src/db/schemas/user-key.ts",
"./src/db/schemas/user.ts",
"./src/db/schemas/user-mute.ts",
"./src/endpoints.ts",
"./src/endpoints/account/avatar/update.ts",
"./src/endpoints/account/banner/update.ts",
Expand Down Expand Up @@ -147,6 +148,8 @@
"./src/endpoints/users/search.ts",
"./src/endpoints/users/show.ts",
"./src/endpoints/users/unfollow.ts",
"./src/endpoints/users/mute.ts",
"./src/endpoints/users/unmute.ts",
"./src/event.ts",
"./src/main.ts",
"./src/rest-handlers/account/avatar/update.ts",
Expand Down Expand Up @@ -227,6 +230,8 @@
"./src/rest-handlers/users/search.ts",
"./src/rest-handlers/users/show.ts",
"./src/rest-handlers/users/unfollow.ts",
"./src/rest-handlers/users/mute.ts",
"./src/rest-handlers/users/unmute.ts",
"./src/server.ts",
"./src/spec/album-file.ts",
"./src/spec/album-tag.ts",
Expand Down